抽象工厂模式
来源:互联网 发布:淘宝旺旺名字怎么改 编辑:程序博客网 时间:2024/06/05 04:10
1.抽象工厂的定义:
提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。
2.抽象工厂的结构和说明:
A,Abstract Factory: 抽象工厂,定义创建一系列产品对象的操作接口。
B,Concrete Factory: 具体的工厂,实现抽象工厂定义的方法,具体实现一系列产品对象的创建。
C,Abstract Product: 定义一类产品对象的接口。
D,Concrete Product: 具体的产品实现对象,通常在具体工厂里面,会选择具体的产品实现对象,
来创建符合抽象工厂定义的方法返回的产品类型的对象。
E,Client:客户端,主要使用抽象工厂来获取一系列所需要的产品对象,然后面向这些产品对象的接口编程,
以实现需要的功能。
3.模式实现
AbstractProductA.java
AbstractProductB.java
ProductA1.java
ProductA2.java
ProductB1.java
ProductB2.java
ConcreteFactory1.java
ConcreteFactory2.java
Client.java
4.思考抽象工厂
抽象工厂模式的本质:选择产品簇的实现
A, 抽象工厂模式的本质
工厂方法是选择单个产品的实现,虽然一个类里面可以有多个工厂方法,但是这些方法之间一般是没有联系的,即使看起来像有联系。但是抽象工厂着重的就是为一个产品簇选择实现,定义在抽象工厂 里面的方法通常是有联系的,它们都是产品的某一个部分或者相互依赖的。如果抽象工厂里面只定义一个方法,直接创建产品,那么就退化成为工厂方法了。
B,何时选用抽象工厂模式
建议在以下情况中选用抽象工厂模式:
B1,如果希望一个系统独立于它的产品的创建、组合和表示的时候。换句话说,希望一个系统只是知道产品的接口,而不关心实现的时候。
B2,如果一个系统要由多个产品系列中的一个来配置的时候。换句话说,就是可以动态地切换产品簇的时候。
B3,如果要强调一系列相关产品的接口,以便联合使用它们的时候。
提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。
2.抽象工厂的结构和说明:
A,Abstract Factory: 抽象工厂,定义创建一系列产品对象的操作接口。
B,Concrete Factory: 具体的工厂,实现抽象工厂定义的方法,具体实现一系列产品对象的创建。
C,Abstract Product: 定义一类产品对象的接口。
D,Concrete Product: 具体的产品实现对象,通常在具体工厂里面,会选择具体的产品实现对象,
来创建符合抽象工厂定义的方法返回的产品类型的对象。
E,Client:客户端,主要使用抽象工厂来获取一系列所需要的产品对象,然后面向这些产品对象的接口编程,
以实现需要的功能。
3.模式实现
AbstractFactory.java
package com.java.pattern.abstractfactory;/** * 抽象工厂的接口,声明创建抽象产品对象的操作 */public interface AbstractFactory {/** * 创建抽象产品A的对象 * * @return */public AbstractProductA createProductA();/** * 创建抽象产品B的对象 * * @return */public AbstractProductB createProductB();}
AbstractProductA.java
package com.java.pattern.abstractfactory;/** * 抽象产品A的接口 * */public interface AbstractProductA {}
AbstractProductB.java
package com.java.pattern.abstractfactory;/** * 抽象产品B的接口 * */public interface AbstractProductB {}
ProductA1.java
package com.java.pattern.abstractfactory;/** * 产品A的具体实现 */public class ProductA1 implements AbstractProductA {}
ProductA2.java
package com.java.pattern.abstractfactory;/** * 产品A的具体实现 */public class ProductA2 implements AbstractProductA {}
ProductB1.java
package com.java.pattern.abstractfactory;/** * 产品B的具体实现 */public class ProductB1 implements AbstractProductB {}
ProductB2.java
package com.java.pattern.abstractfactory;/** * 产品B的具体实现 */public class ProductB2 implements AbstractProductB {}
ConcreteFactory1.java
/** * 具体的工厂实现对象,实现创建具体的产品对象的操作 * */public class ConcreteFactory1 implements AbstractFactory {public AbstractProductA createProductA() {return new ProductA1();}public AbstractProductB createProductB() {return new ProductB1();}}
ConcreteFactory2.java
package com.java.pattern.abstractfactory;/** * 具体的工厂实现对象,实现创建具体的产品对象的操作 * */public class ConcreteFactory2 implements AbstractFactory {public AbstractProductA createProductA() {return new ProductA2();}public AbstractProductB createProductB() {return new ProductB2();}}
Client.java
package com.java.pattern.abstractfactory;public class Client {public static void main(String[] args) {// 创建抽象工厂对象AbstractFactory af = new ConcreteFactory1();// 通过抽象工厂来获取一系列的对象,如产品A和产品Baf.createProductA();af.createProductB();}}
4.思考抽象工厂
抽象工厂模式的本质:选择产品簇的实现
A, 抽象工厂模式的本质
工厂方法是选择单个产品的实现,虽然一个类里面可以有多个工厂方法,但是这些方法之间一般是没有联系的,即使看起来像有联系。但是抽象工厂着重的就是为一个产品簇选择实现,定义在抽象工厂 里面的方法通常是有联系的,它们都是产品的某一个部分或者相互依赖的。如果抽象工厂里面只定义一个方法,直接创建产品,那么就退化成为工厂方法了。
B,何时选用抽象工厂模式
建议在以下情况中选用抽象工厂模式:
B1,如果希望一个系统独立于它的产品的创建、组合和表示的时候。换句话说,希望一个系统只是知道产品的接口,而不关心实现的时候。
B2,如果一个系统要由多个产品系列中的一个来配置的时候。换句话说,就是可以动态地切换产品簇的时候。
B3,如果要强调一系列相关产品的接口,以便联合使用它们的时候。
0 0
- 工厂模式 -- 抽象工厂
- 工厂模式-抽象工厂
- 工厂模式-抽象工厂
- 工厂模式/抽象工厂模式
- 工厂模式&&抽象工厂模式
- 工厂模式---抽象工厂模式
- 工厂模式&抽象工厂模式
- 工厂模式,抽象工厂模式
- 【模式】抽象工厂模式
- 简单工厂、工厂模式、抽象工厂模式
- 简单工厂、工厂模式、抽象工厂模式
- 简单工厂&工厂模式&抽象工厂模式
- 工厂方法,抽象工厂模式
- 2,工厂模式--抽象工厂
- C#工厂模式-抽象工厂
- 工厂模式与抽象工厂
- 抽象工厂设计模式
- 抽象工厂模式
- 文章标题
- POJ 1523-SPF(Tarjan算法-关节点)
- 微软宣布开源PowerShell:Linux和MacOS版到来
- CSS属性纪要
- linux打的war包在linux上无法运行(一个奇葩事件,spring无法读取Properties)
- 抽象工厂模式
- 21天实战caff--2 第8天 Caffe数据结构-Blob基本用法
- 浅谈SOA面向服务化编程架构(dubbo)
- JAVA基础再回首(十四)——集合框架、Collection接口、迭代器Iterator、List接口、ListIterator列表迭代器
- 拒绝nodejs回调金字塔
- 九个让JavaScript调试更简单的console命令
- 加油站
- Linux/C-网络信息传输:cURL-HTTP协议发送信息
- 编辑框控件随窗口大小变化重写OnSize()