2.FactoryMethod-工厂方法模式
来源:互联网 发布:常州智能网络地板厂家 编辑:程序博客网 时间:2024/04/29 15:23
Factory Method 工厂方法模式
工厂方法模式:
- 核心,定义一个创建对象的接口/抽象类,让子类来决定实例化哪一个类,使实例化延迟到子类。
当有新的产品产生时,只要按照产品接口和工厂接口来生成,就可以被客户端使用,而不必改码.
所以工厂方法模式是完全符合开闭原则的。 - 工厂方法克服了简单工厂违背开放封闭原则的缺点,又保持了封装对象创建过程的优点。
降低了客户程序和产品对象之间的耦合。
- 核心,定义一个创建对象的接口/抽象类,让子类来决定实例化哪一个类,使实例化延迟到子类。
示例类图:
示例代码:
// 产品public interface Sender { public void send(String msg);}//具体产品public class MailSender implements Sender { @Override public void send(String msg) { System.out.println("MailSender send : " + msg); }}public class SmsSender implements Sender { @Override public void send(String msg) { System.out.println("SmsSender send : " + msg); }}// 定义一个创建对象的接口,让子类来决定实例化哪一个类,使实例化延迟到子类。public interface SenderFactory { public Sender getSender();}//具体工厂(每个具体工厂负责一个具体产品)public class MailSenderFactory implements SenderFactory { @Override public Sender getSender() { return new SmsSender(); }}public class SmsSenderFactory implements SenderFactory{ @Override public Sender getSender() { return new MailSender(); }}// 测试public class FactoryTest { public static void main(String[] args) { FactoryMethod(); } // 工厂方法模式测试 public static void FactoryMethod() { SenderFactory senderFactory = new MailSenderFactory(); Sender sender = senderFactory.getSender(); sender.send("MailSenderFactory"); new SmsSenderFactory().getSender().send("SmsSenderFactory"); }}
工厂方法是简单工厂的进一步抽象和推广,由于使用了多态性,所以每增加一个产品就要增加一个对应的产品工厂类,增加了额外的开发量。
当产品种类非常多时,就会出现大量的与之对应的工厂类,使用简单工厂模式与工厂方法模式相结合的方式可以减少工厂类:
即对于产品树上类似的种类(一般是树的叶子中互为兄弟的)使用简单工厂模式来实现。
0 0
- 2.FactoryMethod-工厂方法模式
- 2.FactoryMethod-工厂方法模式
- FactoryMethod 工厂方法模式
- 工厂方法模式(FactoryMethod)
- FactoryMethod 工厂方法模式
- factorymethod 工厂方法模式
- 设计模式--工厂方法(FactoryMethod)
- FactoryMethod(工厂方法)模式
- 工厂方法(FactoryMethod)模式
- 设计模式工厂方法(FactoryMethod)
- 工厂方法模式(FactoryMethod)
- 设计模式之--工厂方法模式(FactoryMethod )
- 设计模式 -- 工厂方法模式 FactoryMethod
- 设计模式之工厂方法模式(FactoryMethod)
- 设计模式-工厂方法模式-factorymethod-python
- 设计模式之FactoryMethod(工厂方法)
- 设计模式(二) 工厂方法(FactoryMethod)
- 创建型模式-FactoryMethod ( 工厂方法 )
- 事件分发的源码解析
- Ubuntu Read and Write NetCDF file
- jQuery中的$.getJSON( )方法
- java文件读写实例
- 【软件测试】对比V模型、W模型、H模型,简述他们各自的特点
- 2.FactoryMethod-工厂方法模式
- 微信支付订单工具类
- E575: viminfo: Illegal starting char in line: hello=Hello\ \!\How\ are\ you\ \?
- spring boot 国际化
- UML之九种图
- 关于前端页面的keydown事件
- Undefined index: HTTP_RAW_POST_DATA的解决办法
- SetClassLong,GetClassLong 动态改变光标
- 系统集成项目管理工程师---项目进度管理