抽象工厂模式
来源:互联网 发布:奇兔刷机软件怎么样 编辑:程序博客网 时间:2024/04/28 16:42
思考问题:一个工厂不仅计划生产汽车,也计划生产电视,不确定具体工厂、具体汽车品牌、具体电视品牌,如何设计?
个人解答:设计一个抽象工厂,里面提供两个方法,一个声明是生产汽车的,另一个声明是生产电视的。所以还需要定义汽车接口和电视接口;
抽象工厂模式与工厂模式的区别:
1. 抽象工厂模式是工厂方法的更高层次的抽象,它将不同工厂方法整合在一个类中,比如抽象工厂模式的工厂类中可能生产多系列物品(比如汽车和电视等),而工厂方法模式则生产一系列物品(比如汽车);当抽象工厂只是生产一中系列产品时就类似工厂方法了。
2. 工厂方法模式是在一个工厂类中通过参数来决定具体生产的产品;而抽象工厂模式则通过多个工厂类来实现生产多个具体产品的功能,不通过传参决定;
首先设计抽象工厂类:
package com.shusheng.abstractFactory;/**抽象工厂*/public interface AbstractFactoryI { /**生产汽车的方法声明*/ public CarI factoryCar(); /**生产家电的方法声明*/ public TelevisionI factoryTV();}
然后设计汽车接口类:
package com.shusheng.abstractFactory;/**汽车接口*/public interface CarI {}
设计电视接口类:
package com.shusheng.abstractFactory;/**电视接口*/public interface TelevisionI {}
具体工厂类:
GoogleFactory:
package com.shusheng.abstractFactory;public class GoogleFactory implements AbstractFactoryI{ /**google工厂生产汽车*/ @Override public CarI factoryCar() { return new GoogleCar(); } /**google工厂生产TV*/ @Override public TelevisionI factoryTV() { return new GoogleTV(); }}
具体工厂:
HaierFactory:
package com.shusheng.abstractFactory;/**具体的海尔工厂*/public class HaierFactory implements AbstractFactoryI { /**生产汽车*/ @Override public CarI factoryCar() { return new HaierCar(); } /**生产电视*/ @Override public TelevisionI factoryTV() { return new HaierTV(); }}
GoogleCar:
package com.shusheng.abstractFactory;/**googleCar,瞎编的哈。*/public class GoogleCar implements CarI {}
GoogleTV:
package com.shusheng.abstractFactory;/**googleTV,瞎编的哈。*/public class GoogleTV implements TelevisionI {}
海尔汽车HaierCar
package com.shusheng.abstractFactory;/**海尔汽车*/public class HaierCar implements CarI {}
HaierTV:
package com.shusheng.abstractFactory;/**海尔电视*/public class HaierTV implements TelevisionI {}
测试类:
package com.shusheng.abstractFactory;public class AbstractFactoryTest { public static void main(String[] args) { AbstractFactoryI haierFactory = new HaierFactory();//海尔工厂 CarI carI = haierFactory.factoryCar();//生产汽车 TelevisionI tv1 = haierFactory.factoryTV();//生产电视 System.out.println(carI); System.out.println(tv1); AbstractFactoryI googleFactoryI = new GoogleFactory();//google工厂 CarI carI2 = googleFactoryI.factoryCar();//生产汽车 TelevisionI tv2 = googleFactoryI.factoryTV();//生产电视 System.out.println(carI2); System.out.println(tv2); }}
以上例子纯属虚构,只是为了方便理解而瞎蒙的。
0 0
- 工厂模式 -- 抽象工厂
- 工厂模式-抽象工厂
- 工厂模式-抽象工厂
- 工厂模式/抽象工厂模式
- 工厂模式&&抽象工厂模式
- 工厂模式---抽象工厂模式
- 工厂模式&抽象工厂模式
- 工厂模式,抽象工厂模式
- 【模式】抽象工厂模式
- 简单工厂、工厂模式、抽象工厂模式
- 简单工厂、工厂模式、抽象工厂模式
- 简单工厂&工厂模式&抽象工厂模式
- 工厂方法,抽象工厂模式
- 2,工厂模式--抽象工厂
- C#工厂模式-抽象工厂
- 工厂模式与抽象工厂
- 抽象工厂设计模式
- 抽象工厂模式
- listview item中button点击事件和listview onItem点击事件冲突问题解决
- select中的onchange,使图片随着onchange的索引值切换
- 链表类的实现及其简单功能
- shell 教程
- Unity Shaders and Effects Cookbook (6-3) 修改渲染队列Queue 来 修改渲染顺序
- 抽象工厂模式
- Android之十SlidingMenu侧滑菜单的实现分析
- ecshop ajax无刷新登陆
- 使用svn管理android工程
- jQuery判断checkbox,radio是否选中
- 剑指Offer--038-数字在排序数组中出现的次数
- linux与Windows的不同
- 部分 CSS 的浏览器兼容处理
- jdk源码分析之AbstractMap