设计模式(五)抽象工厂模式
1.抽象工厂模式定义
抽象工厂模式可以说是是工厂方法模式的升级版,当需要创建的产品有多个产品线(产品族)时使用抽象工厂模式是比较好的选择。那什么是多个产品线呢?拿我们在简单工厂模式和工厂方法模式中学习的生产电脑的例子来举例,我们一直都是生产联想和惠普的电脑,但是电脑也有多个产品线:台式机、笔记本和平板等等,联想和惠普都在生产这些不同产品线上的电脑,使用工厂方法模式已经满足不了需求,这一篇文章我们就用抽象工厂模式来解决这一问题。
2.抽象工厂模式简单实现
联想和惠普生产的电脑分为了两个产品线,一个台式机,一个是笔记本。为了解决增加产品线的问题,我们用抽象工厂模式来进行实现。
①抽象产品
首先定义抽象产品类:
public abstract class DesktopComputer { public abstract void start(); } public abstract class NotebookComputer { public abstract void start(); }
两个抽象产品类分别为DesktopComputer和NotebookComputer ,用来定义两个产品线:台式机和笔记本。它们都定义了start方法,用来启动电脑。
②具体产品
具体产品为联想和惠普旗下的台式机和笔记本,如下所示。
public class LenovoDesktopComputer extends DesktopComputer { @Override public void start() { System.out.println("联想台式电脑启动"); } } public class HpDesktopComputer extends DesktopComputer { @Override public void start() { System.out.println("惠普台式电脑启动"); } } public class LenovoNotebookComputer extends NotebookComputer { @Override public void start() { System.out.println("联想笔记本电脑启动"); } } public class HpNotebookComputer extends NotebookComputer { @Override public void start() { System.out.println("惠普笔记本电脑启动"); }
③抽象工厂
接着创建生产电脑的抽象工厂,如下所示,
public abstract class ComputerFactory { public abstract DesktopComputer createDesktopComputer(); public abstract NotebookComputer createNotebookComputer(); }
定义了两个方法,分别用来生产台式电脑和笔记本电脑。
④具体工厂
定义联想和惠普工厂:
public class LenovoFactory extends ComputerFactory { @Override public DesktopComputer createDesktopComputer() { return new LenovoDesktopComputer(); } @Override public NotebookComputer createNotebookComputer() { return new LenovoNotebookComputer(); } } public class HpFactory extends ComputerFactory { @Override public DesktopComputer createDesktopComputer() { return new HpDesktopComputer(); } @Override public NotebookComputer createNotebookComputer() { return new HpNotebookComputer(); } }
联想工厂和惠普工厂用来生产台式机和笔记本这两个不同产品线的电脑。
⑤客户端调用
最后编写客户端:
public class Client { public static void main(String[]args) { ComputerFactory lenocoFactory=new LenovoFactory(); lenocoFactory.createDesktopComputer().start(); lenocoFactory.createNotebookComputer().start(); ComputerFactory hpFactory=new HpFactory(); hpFactory.createDesktopComputer().start(); hpFactory.createNotebookComputer().start(); } }
分别用LenovoFactory和HpFactory生产台式和笔记本电脑,并调用start方法启动它们。
运行结果为:
联想台式电脑启动
联想笔记本电脑启动
惠普台式电脑启动
惠普笔记本电脑启动
3.抽象工厂模式的优缺点
优点
具体类的创建实例过程与客户端分离,客户端通过工厂的抽象接口操纵实例,客户端并不知道具体的实现是谁。
缺点
如果增加新的产品族则也需要修改抽象工厂和所有的具体工厂。
抽象工厂模式的使用场景
- 一个系统不依赖于产品线实例如何被创建、组合和表达的细节。
- 系统中有多于一个的产品线,而每次只使用其中某一产品线。
- 一个产品线(或是一组没有任何关系的对象)拥有相同的约束。
抽象工厂模式与工厂方法模式最大的区别:抽象工厂中每个工厂可以创建多种类的产品;而工厂方法每个工厂只能创建一类
相关文章
- 原型模式故事链--new一个对象的过程
- 设计模式的C语言应用-外观模式-第八章
- 设计模式之抽象工厂模式
- C#设计模式——抽象工厂模式(Abstract Factory Pattern)
- 【设计模式】组合实体模式
- 【设计模式】抽象工厂模式
- 设计模式--组合模式
- 设计模式--适配器模式
- 设计模式复习--抽象工厂模式
- 《Android源码设计模式》--状态模式--责任链模式--解释器模式--命令模式--观察者模式--备忘录模式--迭代器模式
- 【设计模式】抽象工厂模式
- [Head First设计模式]山西面馆中的设计模式——建造者模式
- 【java设计模式】之 抽象工厂(Abstract Factory)模式
- 不一样的中介模式(设计模式十四)
- C# 设计模式----抽象工厂模式
- Adapter 适配器模式(设计模式03)
- C# 设计模式----抽象工厂模式
- Atitit 设计模式之道 艾提拉著 sbb 目录 1. 一、设计模式的分类1 1.1. 总体来说设计模式分为三大类:1 1.2. 创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建
- Java的二十三种设计模式(单例模式、工厂方法模式、抽象工厂模式)
- android 9.0去掉recovery模式UI页面的选项
- 设计模式的C语言应用-观察者模式-第四章
- 设计模式(三)---抽象工厂模式
- 设计模式学习笔记-简单工厂模式
- 设计模式之解释器模式
- 设计模式------工厂方法模式
- 设计模式(Python语言)----抽象工厂模式
- 【设计模式】外观模式(C#)