设计模式04_抽象工厂模式
来源:互联网 发布:可口可乐表白软件 编辑:程序博客网 时间:2024/05/01 01:50
本文是在学习中的总结,欢迎转载但请注明出处:http://blog.csdn.net/pistolove/article/details/46440915
抽象工厂模式是对象的创建模式,它是工厂方法模式的进一步推广。
抽象工厂模式与工厂方法模式的最大区别就在于工厂方法模式针对的是一个产品等级结构;而抽象工厂模式则需要面对多个产品等级结构。
假设一个子系统需要一些产品对象,而这些产品又属于一个以上的产品等级结构。那么为了将消费这些产品对象的责任和创建这些产品对象的责任分割开来,可以引进抽象工厂模式。这样的话,消费产品的一方不需要直接参与产品的创建工作,而只需要向一个公用的工厂接口请求所需要的产品。
优点:
(1)分离接口和实现
客户端使用抽象工厂来创建需要的对象,而客户端根本就不知道具体的实现是谁,客户端只是面向产品的接口编程而已。也就是说,客户端从具体的产品实现中解耦。
(2)使切换产品族变得容易
因为一个具体的工厂实现代表的是一个产品族,比如上面例子的从A产品到B产品只需要切换一下具体工厂。
缺点:
(1)不太容易扩展新的产品
如果需要给整个产品族添加一个新的产品,那么就需要修改抽象工厂,这样就会导致修改所有的工厂实现类。
通过下面代码来熟悉抽象工厂模式:
不同的抽象工厂:
package com.design.abstractFactory;//每一种牌子的产品负责生产工厂,即不同的厂商负责自己牌子的生产public abstract class Factory1 {abstract public IproductA getproductA1();abstract public IproductB getProductB1();}
package com.design.abstractFactory;public abstract class Factory2 {abstract public IproductA getproductA2();abstract public IproductB getproductB2();}
不同的具体工厂:
package com.design.abstractFactory;//具体的工厂生产产品public class ConcreateFactory1 extends Factory1 {@Overridepublic IproductA getproductA1() {return new ProductA1();}@Overridepublic IproductB getProductB1() {return new ProductB1();}}
package com.design.abstractFactory;public class ConcreateFactory2 extends Factory2{@Overridepublic IproductA getproductA2() {return new ProductA2();}@Overridepublic IproductB getproductB2() {return new ProductB2();}}
定义不同的产品接口:
package com.design.abstractFactory;//定义不同的产品之间的一定具备的标准,用interface实现 public interface IproductA {public void method();}
package com.design.abstractFactory;public interface IproductB {public void method();}
不同的具体产品:
package com.design.abstractFactory;//实现了产品标准实现的一系列具体产品public class ProductA1 implements IproductA {@Overridepublic void method() {System.err.println("A1产品生产A1");}}
package com.design.abstractFactory;public class ProductA2 implements IproductA {@Overridepublic void method() {System.err.println("A2生产产品A2");}}
package com.design.abstractFactory;public class ProductB1 implements IproductB {@Overridepublic void method() {System.err.println("B1生产产品B1");}}
package com.design.abstractFactory;public class ProductB2 implements IproductB {@Overridepublic void method() {System.err.println("B2生产产品B2");}}
客户端实现:
package com.design.abstractFactory;public class Client {public static void main(String[] args) {Factory1 factory = new ConcreateFactory1();IproductA a1 = factory.getproductA1();IproductB b1 = factory.getProductB1();a1.method();b1.method();}}
测试结果:
A1产品生产A1
B1生产产品B1
2 0
- 设计模式04_抽象工厂模式
- Java设计模式_抽象工厂模式
- 大话设计模式_抽象工厂模式
- 设计模式_抽象工厂模式
- 设计模式03_抽象工厂模式
- 设计模式_抽象工厂模式
- 设计模式05_抽象工厂模式
- java设计模式_抽象工厂模式
- 设计模式_抽象工厂模式(4)
- Java设计模式_(创建型)_抽象工厂模式
- java基础_设计模式_抽象工厂模式
- java设计模式03_抽象工厂模式
- 移动架构06_设计模式二:抽象工厂模式
- 抽象工厂设计模式
- 设计模式-----抽象工厂
- 抽象工厂设计模式
- 抽象工厂设计模式
- 抽象工厂设计模式
- Java apache上传文件
- 25条提高iOS App性能的建议和技巧
- 笔记_网络02
- VC++ 输入流迭代器
- mysql备份恢复
- 设计模式04_抽象工厂模式
- 关于C#的Type.GetType血泪史
- poj 2407 Relatives 【容斥原理基础题】
- tar打包过滤某个文件及目录
- 后缀数组题目小结
- 2011年SAT数学成绩换算表介绍
- fullPage.js api 介绍
- WEB项目登陆验证思路
- ajax异步调用