第七个设计模式:抽象工厂
来源:互联网 发布:windows live3.2下载 编辑:程序博客网 时间:2024/06/02 23:07
第七个设计模式:抽象工厂
工厂方法解决了一个产品等级结构的创建,那抽象工厂则是解决多个产品等级结构的创建方案.是更为抽象的方案.
UML示意图:
组成部分:
1. 抽象工厂
2. 具体工厂
3. 抽象产品
4. 具体产品
代码例子:
1. 抽象工厂
package com.eekq.creator.abstractfactory;
public interface Creator {
public ProductA factoryA();
public ProductB factoryB();
}
2. 抽象产品
package com.eekq.creator.abstractfactory;
public interface ProductA {
//业务方法
public void doWorkA();
}
package com.eekq.creator.abstractfactory;
public interface ProductB {
//业务方法
public void doWorkB();
}
3. 具体工厂
package com.eekq.creator.abstractfactory.impl;
import com.eekq.creator.abstractfactory.Creator;
import com.eekq.creator.abstractfactory.ProductA;
import com.eekq.creator.abstractfactory.ProductB;
public class ConcreteCreator1 implements Creator {
public ProductA factoryA() {
return new ProductA1();
}
public ProductB factoryB() {
return new ProductB1();
}
}
package com.eekq.creator.abstractfactory.impl;
import com.eekq.creator.abstractfactory.Creator;
import com.eekq.creator.abstractfactory.ProductA;
import com.eekq.creator.abstractfactory.ProductB;
public class ConcreteCreator2 implements Creator {
public ProductA factoryA() {
return new ProductA2();
}
public ProductB factoryB() {
return new ProductB2();
}
}
4. 具体产品
package com.eekq.creator.abstractfactory.impl;
import com.eekq.creator.abstractfactory.ProductA;
public class ProductA1 implements ProductA {
public void doWorkA() {
System.out.println("ProductA1.doWorkA()");
}
}
package com.eekq.creator.abstractfactory.impl;
import com.eekq.creator.abstractfactory.ProductA;
public class ProductA2 implements ProductA {
public void doWorkA() {
System.out.println("ProductA2.doWorkA()");
}
}
package com.eekq.creator.abstractfactory.impl;
import com.eekq.creator.abstractfactory.ProductB;
public class ProductB1 implements ProductB {
public void doWorkB() {
System.out.println("ProductB1.doWorkB()");
}
}
package com.eekq.creator.abstractfactory.impl;
import com.eekq.creator.abstractfactory.ProductB;
public class ProductB2 implements ProductB {
public void doWorkB() {
System.out.println("ProductB2.doWorkB()");
}
}
5.客户端的调用
package com.eekq.creator.abstractfactory;
import com.eekq.creator.abstractfactory.impl.ConcreteCreator1;
import com.eekq.creator.abstractfactory.impl.ConcreteCreator2;
public class Client {
public static void main(String[] args) {
Creator c1 = new ConcreteCreator1();
Creator c2 = new ConcreteCreator2();
ProductA a1 = c1.factoryA();
ProductA a2 = c2.factoryA();
ProductB b1 = c1.factoryB();
ProductB b2 = c2.factoryB();
a1.doWorkA();
a2.doWorkA();
b1.doWorkB();
b2.doWorkB();
}
}
6. 输出结果
ProductA1.doWorkA()
ProductA2.doWorkA()
ProductB1.doWorkB()
ProductB2.doWorkB()
7.总结
抽象工厂是工厂方法的一种扩充,同样有着工厂方法的优点.工厂方法每个具体工厂对应一个具体产品,而抽象工厂则对应同一产品等级中的多个具体产品.前提条件是预先设计好产品的等级结构.
作者:飞行鱼 QQ:6868861 推荐J2EE群:7715552
- 第七个设计模式:抽象工厂
- 抽象工厂设计模式
- 设计模式-----抽象工厂
- 抽象工厂设计模式
- 抽象工厂设计模式
- 抽象工厂设计模式
- 设计模式 抽象工厂
- 设计模式--抽象工厂
- 设计模式--抽象工厂
- 设计模式 抽象工厂
- 设计模式-抽象工厂
- 设计模式-> 抽象工厂
- 抽象工厂设计模式
- 设计模式--抽象工厂
- 【设计模式】抽象工厂
- 设计模式---抽象工厂
- 【设计模式-抽象工厂】
- 设计模式-抽象工厂
- 创建进程并等待其退出
- 百度快照更新方法
- SQL中的五种数据类型
- blog的国际化
- 打印预览html页面
- 第七个设计模式:抽象工厂
- oracle分页
- 当当网站SEO案例分析
- Linux 操作系统动态库剖析
- 通过Web Service在本地访问远程数据库的数据
- JSP页面参数详解
- [双语阅读]奥巴马领诺贝尔奖 大谈战争必要性
- 二次缓动
- java.util.regex.Pattern