可复用面向对象软件基础——设计模式(三)之抽象工厂模式
2016-12-15 16:59
501 查看
一、工厂方法模式缺陷
工厂方法模式有一个问题就是,类的创建依赖工厂类,也就是说,如果想要拓展程序,必须修改工厂类,这违背了设计模式六大原则第一条闭包原则。所以,从设计角度考虑,有一定的问题,如何解决?就用到抽象工厂模式,创建多个工厂类,这样一旦需要增加新的功能,直接增加新的工厂类就可以了,不需要修改之前的代码。
二、抽象工厂模式实现
/** * 1、邮寄接口,有一个抽象邮寄方法待实现 * @author barnett * */ public interface Sender { public void send(); }
/** * 2、实现类,邮件邮寄类实现邮寄接口,实现其邮寄的方法 * @author barnett * */ public class MailSender implements Sender { @Override public void send() { System.out.println("I am MailSender!"); } }
/** * 短信邮寄类实现邮寄接口,实现其邮寄方法 * @author barnett * */ public class SmsSender implements Sender { @Override public void send() { System.out.println("I am SmsSender!"); } }
/** * 3、提供器接口,返回邮寄对象,其生产方法待实现 * 工厂依靠实现该接口,生产产品(Sender) * @author barnett * */ public interface Provider { public Sender produce(); }
/** * 4、工厂,邮件邮寄工厂,负责专门生产邮件邮寄实例 * @author barnett * */ public class SendMailFactory implements Provider { @Override public Sender produce() { return new MailSender(); } }
/** * 短信邮寄工厂,专门生产短信邮寄实例 * @author barnett * */ public class SendSmsFactory implements Provider { @Override public Sender produce() { return new SmsSender(); } }
/** * 5、测试类 * @author barnett * */ public class Test { public static void main(String[] args) { // 实例一个邮件工厂(因其实现了提供器接口,可返回一个具有专门生产某种产品生产方法的实例) Provider provider = new SendMailFactory(); // 通过该实例生产产品 Sender sender = provider.produce(); // 调用产品的方法 sender.send(); // 实例生产另一种产品的工厂 SendSmsFactory factory = new SendSmsFactory(); Sender sender2 = factory.produce(); sender2.send(); } }
三、抽象工厂模式优势
若想生产新的产品,只需一个实现类,实现Sender接口,再创建一个专门用于生产该产品的工厂类,实现Provider接口,这样一来,无需改动原有代码,拓展性好。相关文章推荐
- 设计模式(Design Patterns)-可复用面向对象软件的基础 02:工厂方法模式(Factory Method)和抽象工厂模式(Abstract Factory)
- 可复用面向对象软件基础——设计模式(二)之工厂方法模式
- 设计模式-可复用面向对象软件的基础 [读书笔记]
- 设计模式(Design Patterns)-可复用面向对象软件的基础 03:单例模式(Singleton)
- 设计模式 可复用面向对象软件的基础(概念你认识多少)
- 第二章 实例研究:设计一个文档编辑器--《设计模式-可复用面向对象软件的基础》Erich Gamma
- 设计模式(Design Patterns——可复用面向对象软件的基础
- 设计模式(Design Patterns)-可复用面向对象软件的基础 05:原型模式(Prototype)和Java中的深、浅拷贝
- 第一章 引言--《设计模式-可复用面向对象软件的基础》Erich Gamma
- <<设计模式-可复用面向对象软件的基础>>读书笔记
- 可复用面向对象软件基础——设计模式(六)之原型模式
- 设计模式_可复用面向对象软件的基础- 观后感
- 设计模式(Design Patterns)-可复用面向对象软件的基础 06:适配器模式(Adapter)
- Design Patterns(设计模式 可复用面向对象软件的基础)
- 可复用面向对象软件基础——设计模式(五)之建造者模式
- 迭代器模式--《设计模式-可复用面向对象软件的基础》Erich Gamma
- 学习:设计模式 可复用面向对象软件的基础 【引言】
- 第一章 引言--《设计模式-可复用面向对象软件的基础》Erich Gamma
- 设计模式(Design Patterns)-可复用面向对象软件的基础 07:装饰模式(Decorator)
- 设计模式(Design Patterns)-可复用面向对象软件的基础 04:建造者模式(Builder)