设计模式学习篇(一)----Factory Method
来源:互联网 发布:unity3d海底场景 编辑:程序博客网 时间:2024/06/04 19:48
工厂方法模式(Factory Method)
它可以再细分为三种:
1、普通工厂模式:建立一个工厂类,对实现同一接口的类进行实例的创建,如下关系图:
//创建二者的共同接口public interface Sender{ public void Sender();}//创建实现接口的类public class MailSender implements Sender{ public void Sender(){ System.out.println("this is MailSender"); }}public class SmsSender implements Sender{ public void Sender(){ System.out.println("this is SmsSender"); }}//创建工厂类public class SenderFactory{ public Sender produce(type){ if("mail".equals(type)){ return new MailSender(); }else if("sms".equals(type)){ return new SmsSender(); }else{ System.out.println("请输入正确的类型"); return null; } }}//测试类public class FactoryTest{ public Static void main(String[] args){ SenderFactory sf = new SenderFactory(); Sender send = sf.produce("mail"); send.Sender(); }}输出:this is MailSender
2、多个工厂方法模式:为了防止传递的参数有误,造成无法创建实例,可以在工厂类中创建多个方法。
只改变上面的SenderFactory方法:
//工厂类public class SenderFactory{ public Sender produceMail(){ return new MailSender(); } public Sender produceSms(){ return new SmsSender(); }}//测试类public class FactoryTest{ public Static void main(String[] args){ SenderFactory sf = new SenderFactory(); Sender send = sf.produceMail(); send.Sender(); }}
3、静态工厂模式:如果不想创建实例,可以将工厂类中方法改为静态方法。
只需修改工厂类:
//工厂类public class SenderFactory{ public static Sender produceMail(){ return new MailSender(); } public static Sender produceSms(){ return new SmsSender(); }}//测试类public class FactoryTest{ public static void main(String[] args){ Sender send = SenderFactory.produceMail(); send.Sender(); }}输出:this is MailSender
总体来说,工厂模式适合:凡是出现了大量的产品需要创建,并且具有共同的接口时,可以通过工厂方法模式进行创建。在以上的三种模式中,第一种如果传入的字符串有误,不能正确创建对象,第三种相对于第二种,不需要实例化工厂类,所以,大多数情况下,我们会选用第三种——静态工厂方法模式。
问题分析:工厂方法模式有一个问题就是,类的创建依赖工厂类,也就是说,如果想要拓展程序,必须对工厂类进行修改,这违背了闭包原则,所以,从设计角度考虑,有一定的问题,如何解决?就用到抽象工厂模式,创建多个工厂类,这样一旦需要增加新的功能,直接增加新的工厂类就可以了,不需要修改之前的代码。
阅读全文
0 0
- 设计模式学习篇(一)----Factory Method
- 设计模式一(Factory Method,Abstract Factory)
- 设计模式学习--Factory Method
- Java与设计模式学习(一)--工厂方法模式FACTORY METHOD
- 设计模式学习笔记(一):工厂方法模式【Factory Method Pattern】
- java设计模式(一)--工厂模式(Factory Method)
- 设计模式(一)之Factory Method - 工厂模式
- 设计模式(一) Factory Method工厂方法模式
- 设计模式 一 工厂方法Factory Method(工厂模式)
- 【设计模式】学习笔记5:工厂模式(Factory Method)
- java设计模式学习 ----- 工厂方法模式(Factory Method)
- 设计模式学习笔记四:工厂方法(Factory Method)
- 设计模式学习总结:工厂方法(Factory Method)
- 设计模式学习-Factory Method(工厂方法)
- 学习设计模式之一:Factory Method
- 设计模式学习笔记-Factory Method
- Factory Method设计模式
- Factory Method设计模式
- javascript encodeURI和encodeURIComponent的比较
- 70. Climbing Stairs
- ORACLE----id自增长(sql developer 手动操作方式)
- 机械臂——arduino、marlin固件、printrun软件
- 171214 逆向-.Net分析
- 设计模式学习篇(一)----Factory Method
- 802.11协议精读20:初探802.11e(WMM)
- MongoDB的安装
- python 字符串的介绍与应用 12.16
- 单例模式
- java中instanceof的用法
- 贪婪与放纵
- Bootstrap4(一)
- 面向组件编程之Unity 11.Quaternion类属性 线性插值Lerp() 关键字:游戏物体朝向