java23种常用设计模式之工厂方法模式(Factory Method)
2014-12-23 11:10
681 查看
最近真是所有时间都奉献给工作了,包括下班后,连续加了两个星期的班,都没时间写博客……
(借口!!!中午两个小时够写一篇啦!!!哈哈,我错了,是懒……)
23个设计模式才写了3个,我只想说一声,“”革命尚未成功,同志仍需努力呀!"
好了,胡扯到此结束,回到正题。今天我们来捋一捋工厂方法模式。这个模式很容易理解,如其名,无非就是为了偷懒,对某种事物进行工厂式的批量生产。
工厂方法有三种模式:普通工厂方法模式、多个工厂生产模式和静态工厂方法模式。
下面我们一一来揭开它的真面目。
一、普通工厂方法模式
建立一个工厂类,对实现了同一接口的一些类进行实例的创建,举个例子,发送消息,可以使邮件发送也可以是sms发送,我管他是什么消息,给工厂方法一个类型,我要什么就给我生产什么就好了,看类图:
首先,创建邮件和sms的共同接口
Sender.java
MailSender.java
SmsSender.java
SendFactory.java
二、多个工厂方法模式
对普通工厂方法模式的改进,在普通工厂方法模式中,如果传递的字符串出错,则不能正确创建对象,而多个工厂方法模式是提供多个工厂方法,分别创建对象。关系图:
sms
三、静态生产工厂方法
将上面的多个工厂方法模式里的方法置为静态的,不需要创建实例,直接调用即可。
小结:
工厂模式适用范围:凡是出现了大量的产品需要创建,并且具有共同的接口时,可以通过工厂方法模式进行创建。
在以上的三种模式中,普通工厂方法模式如果传入的字符串有误,不能正确创建对象,静态工厂方法模式相对于多种工厂方法模式,不需要实例化工厂类,所以,大多数情况下,静态工厂方法模式更常用。
缺点:工厂方法模式有一个问题,类的创建依赖工厂类,也就是说,如果想要拓展程序,必须对工厂类进行修改,这违背了闭包原则,所以,从设计角度考虑,有一定的问题,如何解决?就用到抽象工厂模式,创建多个工厂类,这样一旦需要增加新的功能,直接增加新的工厂类就可以了,不需要修改之前的代码。下一篇我们来详细介绍一下抽象工厂模式。
下载源码:http://download.csdn.net/detail/github_22022001/8290541
(借口!!!中午两个小时够写一篇啦!!!哈哈,我错了,是懒……)
23个设计模式才写了3个,我只想说一声,“”革命尚未成功,同志仍需努力呀!"
好了,胡扯到此结束,回到正题。今天我们来捋一捋工厂方法模式。这个模式很容易理解,如其名,无非就是为了偷懒,对某种事物进行工厂式的批量生产。
工厂方法有三种模式:普通工厂方法模式、多个工厂生产模式和静态工厂方法模式。
下面我们一一来揭开它的真面目。
一、普通工厂方法模式
建立一个工厂类,对实现了同一接口的一些类进行实例的创建,举个例子,发送消息,可以使邮件发送也可以是sms发送,我管他是什么消息,给工厂方法一个类型,我要什么就给我生产什么就好了,看类图:
首先,创建邮件和sms的共同接口
Sender.java
package com.freedom.factory; public interface Sender { public void send(); }然后,创建邮件发送消息的实现类
MailSender.java
package com.freedom.factory; public class MailSender implements Sender { @Override public void send() { System.out.println("mail"); } }创建SMS发送消息的实现类
SmsSender.java
package com.freedom.factory; public class SmsSender implements Sender { @Override public void send() { System.out.println("sms"); } }接着,建立消息生产工厂
SendFactory.java
package com.freedom.factory; public class SendFactory { //指定生产类型 public Sender produce(String type){ if("mail" .equals(type)) return new MailSender(); else if("sms" .equals(type)) return new SmsSender(); else{ System.out.println("请输入正确的类型"); return null; } } }最后,我们test一下,看看这个工厂能不能正确生产
@Test public void test() { SendFactory sf = new SendFactory(); Sender send = sf.produce("sms"); send.send(); }输出结果:sms
二、多个工厂方法模式
对普通工厂方法模式的改进,在普通工厂方法模式中,如果传递的字符串出错,则不能正确创建对象,而多个工厂方法模式是提供多个工厂方法,分别创建对象。关系图:
package com.freedom.factory; public class SendFactory2 { //生产邮件消息 public Sender produceMail(){ return new MailSender(); } //生产SMS消息 public Sender produceSms(){ return new SmsSender(); } }test
@Test public void test2() { SendFactory2 sf = new SendFactory2(); Sender send = sf.produceMail(); send.send(); Sender send2 = sf.produceSms(); send2.send(); }输出结果:mail
sms
三、静态生产工厂方法
将上面的多个工厂方法模式里的方法置为静态的,不需要创建实例,直接调用即可。
package com.freedom.factory; public class SendFactory3 { public static Sender produceMail(){ return new MailSender(); } public static Sender produceSms(){ return new SmsSender(); } }test
@Test public void test3() { Sender send = SendFactory3.produceMail(); send.send(); Sender send2 = SendFactory3.produceSms(); send2.send(); }输出结果同上。
小结:
工厂模式适用范围:凡是出现了大量的产品需要创建,并且具有共同的接口时,可以通过工厂方法模式进行创建。
在以上的三种模式中,普通工厂方法模式如果传入的字符串有误,不能正确创建对象,静态工厂方法模式相对于多种工厂方法模式,不需要实例化工厂类,所以,大多数情况下,静态工厂方法模式更常用。
缺点:工厂方法模式有一个问题,类的创建依赖工厂类,也就是说,如果想要拓展程序,必须对工厂类进行修改,这违背了闭包原则,所以,从设计角度考虑,有一定的问题,如何解决?就用到抽象工厂模式,创建多个工厂类,这样一旦需要增加新的功能,直接增加新的工厂类就可以了,不需要修改之前的代码。下一篇我们来详细介绍一下抽象工厂模式。
下载源码:http://download.csdn.net/detail/github_22022001/8290541
相关文章推荐
- java23种常用设计模式之工厂方法模式(Factory Method)2
- Java23种设计模式案例:工厂方法模式(Factory Method)
- Java开发中的23种设计模式之一:工厂方法模式(Factory Method)
- Java设计模式 - 工厂方法模式(Factory Method)
- java 设计模式 (1) 工厂方法模式(Factory Method)
- java设计模式学习 ----- 工厂方法模式(Factory Method)
- java设计模式学习 ----- 工厂方法模式(Factory Method)
- JAVA设计模式 —工厂方法模式(Factory Method)
- java设计模式1——工厂方法模式(Factory Method)
- (1)Java设计模式-工厂方法模式(Factory Method)
- java设计模式1--工厂方法模式(Factory Method)
- 【Unity3D与23种设计模式】工厂方法模式(Factory Method)
- JAVA设计模式(24):创建型-工厂模式【工厂方法模式】(Factory Method)
- java设计模式(2):工厂方法模式(Factory Method)
- Java设计模式 —— 工厂方法模式 (Factory Method)
- JAVA设计模式(1) —<创建型>工厂方法模式(Factory Method)
- JAVA设计模式三--factorymethod(工厂方法模式)
- Java开发之设计模式--工厂方法模式(Factory Method)
- JAVA设计模式(01):创建型-工厂模式【工厂方法模式】(Factory Method)
- Java设计模式-工厂方法模式(Factory Method)