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

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

抽象工厂模式(Abstract Factory),提供一个创建一系列相关或互相依赖对象的接口,而无需指定它们具体的类。

  便于理解的说,工厂方法模式创建一种对象,抽象工厂模式创建一类(多种)对象。

 

不同工厂生产果汁和水果派,会采用不同水果,得到的果汁和派也不一样。

1,定义果汁和派

public interface Juice {    void show();}public interface Pie {    void show();}

2,假设有两个原材料,分别是苹果和香蕉,每种水果可以制作两种产品。

public class AppleJuice implements Juice {    @Override    public void show() {        System.out.println("Apple juice");    }}public class ApplePie implements Pie {    @Override    public void show() {        System.out.println("Apple pie");    }}
public class BananaJuice implements Juice {    @Override    public void show() {        System.out.println("Banana Juice");    }}public class BananaPie implements Pie {    @Override    public void show() {        System.out.println("Bnanana pie");    }}

3,定义抽象工厂,具有生产果汁和派的能力

public abstract class AbstractFactory {    public abstract Juice createJuice();    public abstract Pie createPie();}

4,苹果工厂

public class AppleFactory extends AbstractFactory{    @Override    public Juice createJuice() {        return new AppleJuice();    }    @Override    public Pie createPie() {        return new ApplePie();    }}

香蕉工厂

public class BananaFactory extends AbstractFactory {    @Override    public Juice createJuice() {        return  new BananaJuice();    }    @Override    public Pie createPie() {        return new BananaPie();    }}

6,客户端获得苹果汁和苹果派

public class AbstractFactoryPattern {    public static void main(String[] args) {        AbstractFactory factory = new AppleFactory();        //AbstractFactory factory = new ChocolateFactory();        factory.createJuice().show();        factory.createPie().show();    }}

7,控制台输出

Apple juiceApple pieProcess finished with exit code 0

 

抽象工厂模式优点:

  如果想要加入巧克力系列,先建立巧克力汁类和巧克力派类,然后建立巧克力工厂,就可以在客户端获得巧克力系列产品了(如上图中注释代码),无需更改原有代码,完全符合开放封闭原则。

  对象的产生依赖抽象类,而不依赖具体的实现,完全符合依赖倒转原则。

缺点:

  如果想在原工厂中增加水果饼干产品,那么要增加饼干接口,苹果饼干类,香蕉饼干类, 还要更改抽象工厂,苹果工厂,香蕉工厂的代码,麻烦。

 

转载于:https://www.cnblogs.com/handler4J/p/10149466.html

你可能感兴趣的文章
Openstack Neutron:二层技术和实现
查看>>
组合设计模式
查看>>
第十五部分_Struts2.1拦截器深度剖析、异常处理
查看>>
[codevs1286]郁闷的出纳员
查看>>
Python匿名函数详解
查看>>
python面向对象(六)之元类
查看>>
quartz.net插件类库封装(含源码)
查看>>
package.json中 npm依赖包版本前的符号的意义
查看>>
Cygwin下获取Android源代码
查看>>
C 自删除技术---批处理方式
查看>>
maven学习(下)利用Profile构建不同环境的部署包
查看>>
win8自带输入法如何切换全角、半角操作流程
查看>>
TensorFlow windows 安装(base anaconda)
查看>>
Percona XtraDB Cluster集群
查看>>
mybatis学习笔记1--HelloMybatis
查看>>
正则表达式全局匹配网址
查看>>
js多张图片合成一张图,canvas(海报图,将二维码和背景图合并) -----vue
查看>>
前端页面刷新与跳转
查看>>
笔记本链接公司内网(跨网段) ,然后保证wifi
查看>>
Httpd做应用代理
查看>>