设计模式(4)--AbstractFactory(抽象工厂模式)--创建型
2017-08-23 15:13
435 查看
1.模式定义:
抽象工厂是应对产品族概念的,提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们的具体类2.模式特点:
抽象工厂模式为创建一组对象提供了一种解决方案。与工厂方法模式相比,抽象工厂模式中的具体工厂不只是创建一种产品,它负责创建一族产品;3.使用场景:
为创建一组对象提供了一种解决方案;4.模式实现:
![](http://images2017.cnblogs.com/blog/588112/201708/588112-20170822104938011-88306651.png)
(1)抽象工厂角色:
这是工厂方法模式的核心,它与应用程序无关。是具体工厂角色必须实现的接口或者必须继承的父类。在java中它由抽象类或者接口来实现。//发动机以及型号 public interface Engine { } public class EngineA extends Engine{ public EngineA(){ System.out.println("制造-->EngineA"); } } public class EngineBextends Engine{ public EngineB(){ System.out.println("制造-->EngineB"); } } //空调以及型号 public interface Aircondition { } public class AirconditionA extends Aircondition{ public AirconditionA(){ System.out.println("制造-->AirconditionA"); } } public class AirconditionB extends Aircondition{ public AirconditionB(){ System.out.println("制造-->AirconditionB"); } }
(2)具体工厂角色:
它含有和具体业务逻辑有关的代码。由应用程序调用以创建对应的具体产品的对象。在java中它由具体的类来实现。//创建工厂的接口 public interface AbstractFactory { //制造发动机 public Engine createEngine(); //制造空调 public Aircondition createAircondition(); }
(3)抽象产品角色:
它是具体产品继承的父类或者是实现的接口。在java中一般有抽象类或者接口来实现。//为宝马320系列生产配件 public class FactoryBMW320 implements AbstractFactory{ @Override public Engine createEngine() { return new EngineA(); } @Override public Aircondition createAircondition() { return new AirconditionA(); } } //宝马523系列 public class FactoryBMW523 implements AbstractFactory { @Override public Engine createEngine() { return new EngineB(); } @Override public Aircondition createAircondition() { return new AirconditionB(); } }
(4)具体产品角色:
具体工厂角色所创建的对象就是此角色的实例。在java中由具体的类来实现。public class Customer { public static void main(String[] args){ //生产宝马320系列配件 FactoryBMW320 factoryBMW320 = new FactoryBMW320(); factoryBMW320.createEngine(); factoryBMW320.createAircondition(); //生产宝马523系列配件 FactoryBMW523 factoryBMW523 = new FactoryBMW523(); factoryBMW320.createEngine(); factoryBMW320.createAircondition(); } }
5.优缺点:
(1)抽象工厂模式优点:
[1]分离接口和实现:客户端使用抽象工厂来创建需要的对象,而客户端根本就不知道具体的实现是谁,客户端只是面向产品的接口编程而已。也就是说,客户端从具体的产品实现中解耦;[2]使切换产品族变得容易:因为一个具体的工厂实现代表的是一个产品族.
[3]向客户端提供一个接口,使得客户端在不必指定产品具体类型的情况下,创建多个产品族中的产品对象
(2)抽象工厂模式缺点:
不太容易扩展新的产品:如果需要给整个产品族添加一个新的产品,那么就需要修改抽象工厂,这样就会导致修改所有的工厂实现类;相关文章推荐
- C#设计模式之三抽象工厂模式(AbstractFactory)【创建型】
- C#设计模式之三抽象工厂模式(AbstractFactory)【创建型】
- 23种设计模式之抽象工厂模式(创建型,2 AbstractFactory,c++实现)
- 面向对象设计模式之AbstractFactory抽象工厂模式(创建型)
- 面向对象设计模式之AbstractFactory抽象工厂模式(创建型)
- 我的设计模式之旅(3)——抽象工厂模式AbstractFactory
- 设计模式C++学习笔记之七(AbstractFactory抽象工厂模式)
- 抽象工厂模式 创建型 设计模式(四)
- "围观"设计模式(8)--创建型之简单工厂模式、工厂方法模式、抽象工厂模式
- 设计模式--创建型-AbstractFactory(抽象工厂)
- 设计模式——创建型模式之 Abstract Factory抽象工厂模式
- 【2】设计模式之抽象工厂模式(AbstractFactory)
- java语言实现创建型设计模式—抽象工厂模式
- 设计模式——抽象工厂模式AbstractFactory
- 设计模式-创建型之抽象工厂模式
- 【设计模式】—-(3)抽象工厂模式(创建型)
- 创建型模式之抽象工厂模式(AbstractFactory)
- 设计模式学习(创建型模式)—抽象工厂模式(Abstract Factory)
- 设计模式实例(Lua)笔记之二(AbstractFactory抽象工厂模式)
- 我的设计模式之旅(3)――抽象工厂模式AbstractFactory