设计模式(二) 工厂模式的学习和使用
来源:互联网 发布:阿里云服务器里安装ftp 编辑:程序博客网 时间:2024/04/29 17:52
什么是工厂模式
在工厂模式(Factory Pattern)中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。
意图 : 定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类,工厂模式使其创建过程延迟到子类进行。
解决类型 :主要解决接口选择的问题。
关键代码:创建过程在其子类执行。
应用实例 :您需要一辆汽车,可以直接从工厂里面提货,而不用去管这辆汽车是怎么做出来的,以及这个汽车里面的具体实现。
优点 : 1、一个调用者想创建一个对象,只要知道其名称就可以了。
2、扩展性高,如果想增加一个产品,只要扩展一个工厂类就可以。
3、屏蔽产品的具体实现,调用者只关心产品的接口。
缺点 每次增加一个产品时,都需要增加一个具体类和对象实现工厂,使得系统中类的个数成倍增加,在一定程度上增加了系统的复杂度,同时也增加了系统具体类的依赖。这并不是什么好事。
使用场景 1、日志记录器:记录可能记录到本地硬盘、系统事件、远程服务器等,用户可以选择记录日志到什么地方。
2、数据库访问,当用户不知道最后系统采用哪一类数据库,以及数据库可能有变化时。
3、设计一个连接服务器的框架,需要三个协议,"POP3"、"IMAP"、"HTTP",可以把这三个作为产品类,共同实现一个接口。
关系图
实例
- 普通工厂模式
//发送接口public interface Sender{ public void Send();}//实现接口public class MailSender implements Sender { @Override public void Send(){ //TODO 做些什么 }}//实现接口public class SmsSender implements Sender{ @Override public void Send(){ //TODO 做些什么 }}public class SendFactory{ public Sender produce(String type){ if (type.equalsIgnoreCase("mailSender")) { return new MailSender(); } else if (type.equalsIgnoreCase("smsSender")) { return new SmsSender(); } else { return null; } }}@Testpublic void test(){ SendFactory factory = new SendFactory(); Sender sender = factory.produce("smsSender"); sender.Send(); Sender sender = factory.produce("mailSender"); sender.Send(); }
扩展
- 多个工厂方法模式
public class SendFactory { public Sender produceMail(){ return new MailSender(); } public Sender produceSms(){ return new SmsSender(); }}@Testpublic void test(){ SendFactory factory = new SendFactory(); Sender sender = factory.produceMail(); sender.Send(); Sender sender = factory.produceSms(); sender.Send(); }
- 静态工厂方法模式
public class SendFactory { public static Sender produceMail(){ return new MailSender(); } public static Sender produceSms(){ return new SmsSender(); }}@Testpublic void test(){ Sender sender = factory.produceMail(); sender.Send(); Sender sender = factory.produceSms(); sender.Send(); }
以上引用 菜鸟教程工厂模式 And 退思园设计模式
0 0
- 设计模式(二) 工厂模式的学习和使用
- 设计模式(三) 抽象工厂的学习和使用
- 设计模式学习(二)简单工厂
- 设计模式学习系列二:工厂模式
- 设计模式学习(二):工厂模式
- 设计模式学习(二)之工厂模式(简单工厂+工厂方法+抽象工厂)
- java设计模式学习笔记(二)--工厂方法模式
- 设计模式学习(二) 简单工厂模式
- 设计模式学习(二)------ 简单工厂模式
- 设计模式(二):简单工厂、工厂和抽象工厂的区别。
- 设计模式学习之简单工厂模式和工厂模式
- 设计模式(二)工厂方法模式+抽象工厂模式
- 设计模式(二)工厂模式:简单工厂模式
- 设计模式(二)---工厂模式
- 设计模式-工厂模式(二)
- 设计模式(二)---工厂方法模式
- 设计模式(二):抽象工厂模式
- Java设计模式----工厂模式(二)
- 架构漫谈(一):什么是架构?
- WEB项目中使用UEditor(富文本编辑器)
- c++ 使用WinHTTP实现文件下载功能
- Jetty 的工作原理以及与 Tomcat 的比较
- 图片防盗链接的添加
- 设计模式(二) 工厂模式的学习和使用
- Eclipse中java、js、html代码自动提示功能(自动补全)
- 复习
- Error:2147749896 (0x80041008) 上的 WMI 配置,无法执行 SQL Server 系统配置检查器
- 架构漫谈(二):认识概念是理解架构的基础
- 高并发Java 二 多线程基础
- Android机顶盒开发工具小结
- PHP数组
- jar包中加载log4配置文件