博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
抽象工厂模式
阅读量:5447 次
发布时间:2019-06-15

本文共 1708 字,大约阅读时间需要 5 分钟。

抽象工厂模式

什么是抽象工厂模式

抽象工厂简单地说是工厂的工厂,抽象工厂可以创建具体工厂,由具体工厂来产生具体产品。

 

 

 

 抽象工厂,工厂的工厂。   与工厂方法的区别是一组。

 具体细分到某个产品的领域 

    抽象工厂 生产不同的产品族         简单工厂 工厂方法 都是同一个产品族

   抽象工厂 不是相同类型产品的 最后拼接成同一种产品    正常的情况下 业务逻辑下的 同一个产品组下的    当业务很复杂时候 会用到抽象工厂    做零部件的组装   

    看下面的例子:

  先定义不同发动机:

package abstractFactory;//发动机  有不同的型号 public interface Engine {   void run();}class EnginA implements Engine{    @Override    public void run() {        System.out.println("发动机转速很快");            }}class EnginB implements Engine{    @Override    public void run() {        System.out.println("发动机转速很慢");            }}

定义不同座位:

package abstractFactory;//座位public interface Chair {     void run();       }class ChairA implements Chair{    @Override    public void run() {        System.out.println("自动加热");            }}class ChairB implements Chair{    @Override    public void run() {        System.out.println("不能加热");            }}

然后去组装(包装零部件):

 定义包装工厂的接口:

package abstractFactory;public interface CarFactory {      //创建发动机    Engine createEngin();            //创建座椅    Chair createChair();}

实现不同的组装类:

package abstractFactory;public class JiliFactory implements CarFactory {       @Override    public Chair createChair() {                return new ChairA();    }           @Override    public Engine createEngin() {                return new EnginA();    }}

 

上面组装了个吉利汽车

下面运行演示一下:

package abstractFactory;public class Client {    public static void main(String[] args) {        //具体哪个factory        CarFactory carFactory =  new JiliFactory();       Chair chair = carFactory.createChair();       Engine engin = carFactory.createEngin();       chair.run();       engin.run();            }}

运行结果:

 

抽象工厂和工厂方法: 抽象工厂可以放产多种不同品族 支持增加产品族   但是不支持扩展产品族

 

转载于:https://www.cnblogs.com/toov5/p/9863578.html

你可能感兴趣的文章
OPENCV学习笔记2-3_图像遍历(迭代器)
查看>>
DEM转换为Features
查看>>
会计简要学习
查看>>
jquery用户自定义选择器及选择器高级用法实验
查看>>
js学习笔记3:with语句的使用
查看>>
MFC_1.2 消息映射宏 数据绑定和交换
查看>>
抽象工厂模式
查看>>
Android中Button
查看>>
android 中resources管理
查看>>
CSS !Important及感叹号(!) hack的应用
查看>>
Python中的编码和解码问题
查看>>
TX Textcontrol 使用总结五——添加图片
查看>>
[转]Android中常用适配器及定义自己的适配器
查看>>
openjudge noi 鸡尾酒疗法
查看>>
函数对象、函数对象嵌套调用、函数定义、名称空间与作用域以及名称空间的查找顺序...
查看>>
WCF宿主asp.netMVC 并且发布restfull接口数据
查看>>
bzoj2823: [AHOI2012]信号塔&&1336: [Balkan2002]Alien最小圆覆盖&&1337: 最小圆覆盖
查看>>
四则运算随机生成器
查看>>
deeplenrnig学习笔记——什么是特征
查看>>
Java入门系列-23-NIO(使用缓冲区和通道对文件操作)
查看>>