您的位置:首页 > 其它

设计模式一、工厂模式

2017-03-29 16:57 253 查看

设计模式part1

工厂方法模式

工厂方法模式分为三种:1、普通工厂模式 2、多个工厂方法模式 3、静态工厂方法模式

1)    普通工厂模式

就是建立一个工厂类,对实现了同一接口的一些类进行实例的创建

缺点:如果字符串输入不对应就会创建错误



【java】Sender
publicinterface Sender {

void send();

}


【java】SmsSender
publicclass SmsSender implements Sender{

@Override

publicvoid send() {

System.out.println("sms sender");

}

}


 
【java】MailSender
publicclass MailSender implements Sender{

@Override

publicvoid send() {

System.out.println("mail sender");

}

}


 
【java】SendFactory
publicclass SendFactory {

public Sender produce(Stringstr){

if("sms".equals(str)){

returnnew SmsSender();

}elseif("mail".equals(str)){

returnnew MailSender();

}else{

System.out.println("未选择类型");

returnnull;

}

}

}


【java】MainTest
publicclass MainTest {

publicstaticvoid main(String[] args) {

SendFactoryfactory = new SendFactory();

Sendersender = factory.produce("sms");

sender.send();

}

}


 

 

 

2)    多个工厂方法模式

是对普通工厂方法模式的改进,在普通工厂方法模式中,如果传递的字符串出错,则不能正确创建对象,而多个工厂方法模式是提供多个工厂方法,分别创建对象

Note:对普通工厂进行改进,使用不通的方法创建不同的对象

 


【java】Sender
publicinterface Sender {

void send();

}


【java】SmsSender
publicclass SmsSender implements Sender{

@Override

publicvoid send() {

System.out.println("sms sender");

}

}



【java】MailSender
publicclass MailSender implements Sender{

@Override

publicvoid send() {

System.out.println("mail sender");

}

}


 
【java】SendFactory
publicclass SendFactory {

public Sender produceSms() {

returnnew SmsSender();

}

public Sender produceMail() {

returnnew MailSender();

}

}


【java】MainTest
publicclass MainTest {

publicstaticvoid main(String[] args) {

SendFactoryfactory = new SendFactory();

Sendersender = factory.produceMail();

sender.send();

}

}


 

 

3)    静态工厂方法模式

将上面的多个工厂方法模式里的方法置为静态的,不需要创建实例,直接调用即可。

 

【java】Sender
publicinterface Sender {

void send();

}


【java】SmsSender
publicclass SmsSender implements Sender{

@Override

publicvoid send() {

System.out.println("sms sender");

}

}


 
【java】MailSender
publicclass MailSender implements Sender{

@Override

publicvoid send() {

System.out.println("mail sender");

}

}


 
【java】SendFactory
publicclass SendFactory {

publicstatic Sender produceSms() {

returnnew SmsSender();

}

publicstatic Sender produceMail() {

returnnew MailSender();

}

}


【java】MainTest
publicclass MainTest {

publicstaticvoid main(String[] args) {

Sendersender = SendFactory.produceMail();

sender.send();

}

}


 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: