抽象工厂模式
本文例子是以披萨Pizza为例。
1 三种工厂模式
使用模式的前提:
(1)编码时不能预见需要创建哪种类的实例。
(2)系统不应依赖于产品类实例(例如本文的车)如何被创建、组合和表达的细节。
对比:
(1)简单工厂模式:简单工厂模式的工厂类一般是使用静态方法,通过接收的参数的不同来返回不同的对象实例。不修改代码的话,是无法扩展的。
(2)工厂方法模式:定义一个用于创建对象的接口,让子类决定实例化哪一个类。简单说使一个类的实例化延迟到其子类。
(3)抽象工厂模式:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。简单说就是将对象的声明和实现分离。
2 简单工厂模式
2.1 介绍
(1)工厂类角色:这是本模式的核心,含有一定的商业逻辑和判断逻辑。在java中它往往由一个具体类实现。——PizzaStore和SimplePizzaFactory
(2)抽象产品角色:它一般是具体产品继承的父类或者实现的接口。在java中由接口或者抽象类来实现。——Pizza
(3)具体产品角色:工厂类所创建的对象就是此角色的实例。在java中由一个具体类实现。——CheesePizza、VeggiePizza、ClamPizza
2.2 设计类图
3 工厂方法模式
3.1 介绍
工厂方法模式角色介绍:
(1)抽象工厂类角色:工厂的抽象,是一般工厂的父类或实现的接口。在Java中由一个接口或抽象类来实现。——PizzaStore
(2)工厂类角色:这是本模式的核心,含有一定的商业逻辑和判断逻辑。在java中它往往由一个具体类实现。——NYPizzaStore、ChicagoPizzaStore
(3)抽象产品角色:它一般是具体产品继承的父类或者实现的接口。在java中由接口或者抽象类来实现。——Pizza
(4)具体产品角色:工厂类所创建的对象就是此角色的实例。在java中由一个具体类实现。——NYStyleCheesePizza、ChicagoStyleCheesePizza
3.2 设计类图
4 抽象工厂模式
4.1 介绍
抽象工厂模式角色介绍:
(1)抽象工厂角色: 这是工厂方法模式的核心,它与应用程序无关。是具体工厂角色必须实现的接口或者必须继承的父类。在java中它由抽象类或者接口来实现。
(2)具体工厂角色:它含有和具体业务逻辑有关的代码。由应用程序调用以创建对应的具体产品的对象。在java中它由具体的类来实现。
(3)抽象产品角色:它是具体产品继承的父类或者是实现的接口。在java中一般有抽象类或者接口来实现。
(4)具体产品角色:具体工厂角色所创建的对象就是此角色的实例。在java中由具体的类来实现。
4.2 设计类图