java抽象工厂模式(Abstract Factory)-创建型
2016-07-02 23:07
411 查看
意图
在客户端不必指定产品的具体类型的情况下,创建多个产品族中的一族产品。产品族即一系列相关或相互依赖的产品组成的家族。
抽象工厂模式的结构
类图与角色
工厂接口(Factory):所有具体工厂必须实现的接口。为每种类型的产品至少定义一个工厂方法。
具体工厂(Concrete Factory):”对Factory接口的实现。
产品接口(Product):所有具体产品必须实现的接口。每一种产品都定义一个产品接口。
具体产品(Concrete Product):对产品接口的实现。
示例
//产品接口 interface Engine{}//引擎 interface Wheel{}//轮子 //具体产品 class ChinaEngine implements Engine{} class GermanyEngine implements Engine{} class ChinaWheel implements Wheel{} class AmericaWheel implements Wheel{} //工厂接口 interface Manufacturer{//制造商 public Engine getEngine(); public Wheel getWheel(); } //具体工厂 class DZManufacturer implements Manufacturer{//大众汽车制造商 @Override public Engine getEngine(){ return new ChinaEngine(); } @Override public Wheel getWheel(){ return new ChinaWheel(); } } //具体工厂 class BMManufacturer implements Manufacturer{//宝马汽车制造商 @Override public Engine getEngine(){ return new GermanyEngine(); } @Override public Wheel getWheel(){ return new AmericaWheel(); } }
//客户端代码 class test { public static void main (String[] args) throws java.lang.Exception { Manufacturer manu=new DZManufacturer(); Car dz=new Car(); dz.setEngine(manu.getEngine()); dz.setWheel(manu.getWheel()); manu=new BMManufacturer(); System.out.println("大众汽车制造商生产的汽车:"+dz); Car bm=new Car(); bm.setEngine(manu.getEngine()); bm.setWheel(manu.getWheel()); System.out.println("宝马汽车制造商生产的汽车:"+bm); } } class Car { private Engine engine; private Wheel wheel; public Engine getEngine(){ return this.engine; } public void setEngine(Engine engine){ this.engine=engine; } public Wheel getWheel(){ return this.wheel; } public void setWheel(Wheel wheel){ this.wheel=wheel; } @Override public String toString(){ return "引擎:"+engine.getClass().getName()+"。轮胎:"+wheel.getClass().getName(); } }
抽象工厂适用场景
一个系统不应当依赖于产品类实例如何被创建、组合和表达的细节。这个系统的产品有多个产品族,而系统只消费其中某一族产品。
同属于同一族的产品必须一起适用,并且这一约束需要在系统的设计中体现出来。
系统提供了一个产品类的库,所有的产品以同样的接口出现,从而使客户端不依赖于实现。
相关文章推荐
- java串口通信API说明
- Spring4.* 中整合 Hibernate
- 统计一个字符串中单个字符出现的次数
- 编程珠玑第五章二分搜索(折半查找)之java实现
- java中PreparedStatement接口及ResultSet结果集
- Spring MVC @ModelAttribute详解
- Java基础之(四) this的用法
- Java Web 获取项目路径
- springmvc 结合 ehcache
- java框架之springmvc06(数据验证)
- JAVA 多态-深层次理解
- java并发锁-Lock接口
- java文件基本操作
- leetcode 218. The Skyline Problem java代码
- Java中使用Statement接口SQL语句
- Java 工程师的学习线路图。
- Java设计模式之单例模式
- Java总结篇系列:Java泛型
- Java核心技术卷1 第十四章 多线程
- Spring-自定义事件发布