设计模式——抽象工厂Abstract Factory
来源:互联网 发布:activiti实战 源码 编辑:程序博客网 时间:2024/05/16 05:06
前面工厂方法模式有一个问题就是,类的创建依赖工厂类,也就是说,如果想要拓展程序,必须对工厂类进行修改,这违背了闭包原则,所以,从设计角度考虑,有一定的问题,如何解决?就用到抽象工厂模式(把工厂类也抽象出来),创建多个工厂类,这样一旦需要增加新的功能,直接增加新的工厂类就可以了,不需要修改之前的代码。因为抽象工厂不太好理解,我们先看看图,然后就和代码,就比较容易理解。
请看例子:
[java] view plaincopy
- public interface Sender {
- public void Send();
- }
两个实现类:
[java] view plaincopy
- public class MailSender implements Sender {
- @Override
- public void Send() {
- System.out.println("this is mailsender!");
- }
- }
[java] view plaincopy
- public class SmsSender implements Sender {
- @Override
- public void Send() {
- System.out.println("this is sms sender!");
- }
- }
两个工厂类:
[java] view plaincopy
- public class SendMailFactory implements Provider {
- @Override
- public Sender produce(){
- return new MailSender();
- }
- }
[java] view plaincopy
- public class SendSmsFactory implements Provider{
- @Override
- public Sender produce() {
- return new SmsSender();
- }
- }
在提供一个接口:
[java] view plaincopy
- public interface Provider {
- public Sender produce();
- }
测试类:
[java] view plaincopy
- public class Test {
- public static void main(String[] args) {
- Provider provider = new SendMailFactory();
- Sender sender = provider.produce();
- sender.Send();
- }
- }
其实这个模式的好处就是,如果你现在想增加一个功能:发及时信息,则只需做一个实现类,实现Sender接口,同时做一个工厂类,实现Provider接口,就OK了,无需去改动现成的代码。这样做,拓展性较好!
0 0
- 设计模式——抽象工厂模式【Abstract Factory Pattern】
- 设计模式——抽象工厂模式(Abstract Factory)
- Java设计模式 —— 抽象工厂模式 (Abstract Factory)
- 设计模式 —— 抽象工厂模式(Abstract Factory)
- 设计模式——抽象工厂模式(Abstract Factory)
- JAVA设计模式 — 抽象工厂模式(Abstract Factory)
- 《设计模式》学习笔记——ABSTRACT FACTORY 抽象工厂
- 设计模式 Design Parttern ——抽象工厂Abstract Factory
- 设计模式——(Abstract Factory)抽象工厂
- 设计模式——抽象工厂Abstract Factory
- 走进设计模式之——抽象工厂(Abstract Factory)
- 设计模式——抽象工厂(Abstract Factory Pattern)
- 【设计模式】——抽象工厂Abstract Factory
- 抽象工厂模式——Abstract Factory
- 抽象工厂模式——Abstract Factory
- 深入浅出设计模式(2)——工厂和抽象工厂(Factory/Abstract Factory)
- 设计模式-抽象工厂模式(Abstract Factory)
- 设计模式:抽象工厂模式(Abstract Factory)
- 用c语言写的贪吃蛇
- 一步步学习SPD2010--第十一章节--处理母版页(2)--默认母版页
- 网监如何爆菊率预测(转)
- andriod && java interview
- C++线程安全的单例模式
- 设计模式——抽象工厂Abstract Factory
- eclipse android使用问题小结
- 借鉴一下别人写的归并排序
- golang服务端监听端口说明
- intent 使用集合
- linux常用命令
- VS2010 2012 开发下一些常用功能收集日志
- C# 保存图片时压缩(压缩要保存的图片)
- tmp