工厂模式分为三类:
1)简单工厂模式(Simple Factory)
2)工厂方法模式(Factory Method)
3)抽象工厂模式(Abstract Factory)
可以将简单工厂模式(Simple Factory)看为工厂方法模式的一种特例。
下面以发送邮件和发送短信为例实现这三种模式
简单工厂模式:
又称静态工厂方法模式,定义一个用于创建对象的接口。
接口类
public interface Sender { void send(); }
两个实现类
public class SmsSender implements Sender { public void send() { System.out.println("this is sms sender!"); } }
public class MailSender implements Sender { public void send() { System.out.println("this is mailsender!"); } }
工厂类
public class SendFactory { public static 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; } } }
测试方法
Sender sender = SendFactory.produce("sms"); sender.send();
工厂方法模式:
简单工厂模式只有一个工厂类产生产品,如果产品增加,需要修改工厂类的produce方法。
工厂方法模式提供多个工厂方法,分别创建对象。
修改工厂类
public class SendFactory { public static Sender produceMail(){ return new MailSender(); } public static Sender produceSms(){ return new SmsSender(); } }
测试代码
Sender sender = SendFactory.produceSms(); sender.send();
抽象工厂模式:
增加工厂接口
public interface Provider { Sender produce(); }
两个工厂实现类
public class SendSmsFactory implements Provider { public Sender produce() { return new SmsSender(); } }
public class SendMailFactory implements Provider { public Sender produce() { return new MailSender(); } }
测试代码
Provider provider = new SendMailFactory(); Sender sender = provider.produce(); sender.send();
如果你现在想增加一个功能:发QQ信息,则只需做一个实现类,实现Sender接口,同时做一个工厂类,实现Provider接口,无需去改动现成的代码。
相关推荐
目录: 前 言 第一部分 大旗不挥,谁敢冲锋——热身篇 第1章 单一职责原则 1.1 我是“牛”类,我可以担任多职吗 1.2 绝杀技,打破你的传统思维 1.3 我单纯,所以我快乐 1.4 最佳实践 ...附录:23个设计模式
每种设计模式、示例和源代码都经过了精心设计,可以很方便地在实际项目中使用。本书既是一部优秀的教程。可以系统而深入地学习CSS和HTML;也是不可或缺的参考书,可以大大提高你在Web设计和开发中的效率和创造力。 ...
每种设计模式、示例和源代码都经过了精心设计,可以很方便地在实际项目中使用。本书既是一部优秀的教程。可以系统而深入地学习CSS和HTML;也是不可或缺的参考书,可以大大提高你在Web设计和开发中的效率和创造力。 ...
每种设计模式、示例和源代码都经过了精心设计,可以很方便地在实际项目中使用。本书既是一部优秀的教程。可以系统而深入地学习CSS和HTML;也是不可或缺的参考书,可以大大提高你在Web设计和开发中的效率和创造力。 ...
每种设计模式、示例和源代码都经过了精心设计,可以很方便地在实际项目中使用。本书既是一部优秀的教程。可以系统而深入地学习CSS和HTML;也是不可或缺的参考书,可以大大提高你在Web设计和开发中的效率和创造力。 ...
每种设计模式、示例和源代码都经过了精心设计,可以很方便地在实际项目中使用。本书既是一部优秀的教程。可以系统而深入地学习CSS和HTML;也是不可或缺的参考书,可以大大提高你在Web设计和开发中的效率和创造力。 ...
每种设计模式、示例和源代码都经过了精心设计,可以很方便地在实际项目中使用。本书既是一部优秀的教程。可以系统而深入地学习CSS和HTML;也是不可或缺的参考书,可以大大提高你在Web设计和开发中的效率和创造力。 ...
每种设计模式、示例和源代码都经过了精心设计,可以很方便地在实际项目中使用。本书既是一部优秀的教程。可以系统而深入地学习CSS和HTML;也是不可或缺的参考书,可以大大提高你在Web设计和开发中的效率和创造力。 ...
8.3.4 在MarketPlayer.com产品开发中使用PHP的优势 217 8.3.5 PHP实际生活中的竞争 218 8.3.6 会话 218 8.3.7 PHP服务器集成 219 8.3.8 代码管理 219 8.3.9 前景 219 8.4 小结 219 8.5 参考 220 第三部分 深入研究...
每种设计模式、示例和源代码都经过了精心设计,可以很方便地在实际项目中使用。本书既是一部优秀的教程。可以系统而深入地学习CSS和HTML;也是不可或缺的参考书,可以大大提高你在Web设计和开发中的效率和创造力。 ...
每种设计模式、示例和源代码都经过了精心设计,可以很方便地在实际项目中使用。本书既是一部优秀的教程。可以系统而深入地学习CSS和HTML;也是不可或缺的参考书,可以大大提高你在Web设计和开发中的效率和创造力。 ...
.NET 2.0 泛型在实际开发中的一次小应用 C#2.0 Singleton 的实现 .Net Framwork 强类型设计实践 通过反射调用類的方法,屬性,字段,索引器(2種方法) ASP.NET: State Server Gems 完整的动态加载/卸载程序集的解决方案 ...
还重点讲述了如何使用UML和设计模式解决面向客户系统的问题。本书于2003年荣获第13届软件开发图书震撼大奖,适于用作高校计算机专业本科生、研究生和软件学院的软件工程和软件开发相关课程的教材或参考书,也适于...
(JAVASCRIPT、HTML、CSS、数据结构与算法、网络协议、设计模式、操作系统)前端面试题.zip 适合学习/练手、毕业设计、课程设计、期末/期中/大作业、工程实训、相关项目/竞赛学习等。 项目具有较高的学习借鉴价值,...
28.1 VISITOR设计模式系列 28.2 VISITOR模式 28.3 ACYCLIC VISITOR模式 28.4 DECORATOR模式 28.5 EXTENSION OBJECT模式 28.6 结论 参考文献 第29章 STATE模式 29.1 有限状态自动机概述 29.2 实现技术 ...
一、设计目的和要求 通过两周的课程设计,加深对数据库技术相关理论的理解,增强动手能力,掌握使用 现行较为流行的数据库理论和数据库开发工具进行数据库管理操作(如建库、建立完整 性约束,对数据库中数据进行...
在需求工程中使用模式来识别重要的和重复出现的问题,从而减少需求规范过程中的工作量。 我们遵循基于设计科学的模式评估框架,从信任理论开发它们。 为了评估我们方法的可行性,17 个团队使用这些模式为移动应用...
5.2 在驱动中使用链表 5.2.1 链表结构 5.2.2 链表初始化 5.2.3 从首部插入链表 5.2.4 从尾部插入链表 5.2.5 从链表删除 5.2.6 实验 5.3 Lookaside结构 5.3.1 频繁申请内存的弊端 5.3.2...
本书是第I卷,以开发人员在项目开发中经常遇到的问题和必须掌握的技术为中心,介绍了应用PHP进行Web开发的各个方面的知识和技巧,主要包括开发环境、PHP基础、Web页面交互、文件操作、会话应用、图形图像处理及面向...