设计模式 - 抽象工厂模式(Abstract Factory)
2017-04-02 10:15
197 查看
抽象工厂模式(Abstract Factory) 提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。
它可以看作是工厂方法模式(Factory Method)的扩展,相对于Factory Method创建一个对象, Abstract Factory 创建多个相关的对象。
优点: 如果换产品系列,只需换相应的具体工厂即可; 客户代码与产品的具体实现分离。
缺点: 难以扩展新产品,如果要增加一个新产品,工厂的类层次中所有的工厂都要增加一个创建该产品的方法。
示例: 如苹果公司有手机和平板产品系列; 三星公司也有手机和平板产品系列;
测试代码:
它可以看作是工厂方法模式(Factory Method)的扩展,相对于Factory Method创建一个对象, Abstract Factory 创建多个相关的对象。
优点: 如果换产品系列,只需换相应的具体工厂即可; 客户代码与产品的具体实现分离。
缺点: 难以扩展新产品,如果要增加一个新产品,工厂的类层次中所有的工厂都要增加一个创建该产品的方法。
示例: 如苹果公司有手机和平板产品系列; 三星公司也有手机和平板产品系列;
AbstractFactory | Phone | Tablet |
AppleFactory | iPhone | iPad |
SamsungFactory | Galaxy | GalaxyTab |
public interface AbstractFactory { //abstract factory public Phone createPhone(); public Tablet createTablet(); } public class AppleFactory implements AbstractFactory { private final String os = "iOS"; //同一工厂的产品系列有相关的属性 public Phone createPhone() { return new IPhone("iPhone 8", os); }; public Tablet createTablet() { return new IPAD("iPad Air2", os); }; } public class SamsungFactory implements AbstractFactory { private String os = "Andriod"; public Phone createPhone() { return new Galaxy("Galaxy 6", os); }; public Tablet createTablet() { return new SamsungTab("Galaxy Tab2", os); }; } public interface Phone { public String getName(); public String getOS(); } public class IPhone implements Phone { private final String name; private final String os; public IPhone(String name, String os) { this.name = name; this.os = os; } public String getName() { return name; } public String getOS() { return os; } } public class Galaxy implements Phone { private final String name; private final String os; public Galaxy(String name, String os) { this.name = name; this.os = os; } public String getName() { return name; } public String getOS() { return os; } } public interface Tablet { public String getName(); public String getOS(); } public class IPAD implements Tablet { private final String name; private final String os; public IPAD(String name, String os) { this.name = name; this.os = os; } public String getName() { return name; } public String getOS() { return os; } } public class SamsungTab implements Tablet { private final String name; private final String os; public SamsungTab(String name, String os) { this.name = name; this.os = os; } public String getName() { return name; } public String getOS() { return os; } }
测试代码:
public class AbstractFactoryTest { public static void main(String[] args) { AbstractFactory factory = new AppleFactory(); // AbstractFactory factory = new SamsungFactory(); //替换产品系列 Tablet tablet = factory.createTablet(); System.out.println(tablet.getName()); Phone phone = factory.createPhone(); System.out.println(phone.getName()); } }
相关文章推荐
- 设计模式C#描述——抽象工厂模式
- .NET设计模式-抽象工厂模式(Abstract Factory)
- 设计模式C#描述——抽象工厂模式
- 乐在其中设计模式(C#) - 抽象工厂模式(Abstract Factory Pattern)
- 设计模式——创建型模式之 Abstract Factory抽象工厂模式
- [导入]C#面向对象设计模式纵横谈(3):Abstract Factory 抽象工厂模式(创建型模式)
- 设计模式C#描述——抽象工厂模式
- Java设计模式圣经连载(03)-抽象工厂模式
- 乐在其中设计模式(C#) - 抽象工厂模式(Abstract Factory Pattern)
- 我的设计模式之旅(3)――抽象工厂模式AbstractFactory
- 设计模式实践(抽象工厂模式应用)—通信录的优化过程
- 设计模式之抽象工厂模式
- AspectJ实现设计模式(四)——抽象工厂模式
- .NET设计模式:抽象工厂模式(Abstract Factory)
- [导入]C#面向对象设计模式纵横谈(4):Abstract Factory 抽象工厂模式(创建型模式)
- 设计模式笔记-抽象工厂模式
- .Net设计模式之抽象工厂模式(Abstract Factory)
- .NET设计模式(3):抽象工厂模式(Abstract Factory)(转)
- 乐在其中设计模式(C#) - 抽象工厂模式(Abstract Factory Pattern)
- 设计模式(3)-抽象工厂模式(Abstract Factory)