当前位置: 首页 > news >正文

设计模式——工厂方法模式(2)抽象工厂模式(3)

一、写在前面

  • 创建型模式
    • 单例模式
    • 工厂方法模式
    • 抽象工厂模式
    • 原型模式
  • 建造者模式
  • 结构型模式
  • 行为型模式
  • 工厂方法模式和抽象工厂模式都属于工厂模式,所以放在一起介绍了

二、介绍

  • 为什么要工厂模式?工厂就像一个黑盒一样,所以用工厂模式来创建对象,所以最大的好处是能实现解耦
  • 工厂模式有三种:
    • 简单工厂模式(不属于23种)
    • 工厂方法模式
    • 抽象工厂模式

三、简单工厂模式

  • 简单工厂模式不是一种设计模式,其实更像是一种编程习惯
public class SimpleCoffeeFactory {public Coffee createCoffee(String type) {Coffee coffee = null;if("americano".equals(type)) {coffee = new AmericanoCoffee();} else if("latte".equals(type)) {coffee = new LatteCoffee();}return coffee;}
}
  • 优点:这种方法的优点是解耦了创建对象的过程
  • 缺点:这种方法的缺点是如果想要继续增加咖啡的种类,还需要修改简单工厂的代码,违反了开闭原则

四、工厂方法模式

  • 使用工厂方法模式,就可以解决以上问题
  • 个人理解:工厂方法模式就是把几个工厂类用一个抽象工厂接口给泛化,实现更高层次的抽象
public interface CoffeeFactory {Coffee createCoffee();
}
public class LatteCoffeeFactory implements CoffeeFactory {public Coffee createCoffee() {return new LatteCoffee();}
}
public class AmericanCoffeeFactory implements CoffeeFactory {public Coffee createCoffee() {return new AmericanCoffee();}
}
  • 显而易见,这种方法的缺点是:每创建一种咖啡,就要创建一个工厂类和一个咖啡类

五、抽象工厂模式

  • 上面的工厂方法模式只考虑一种产品的创建方法,比如都是创建咖啡,而做不到创建其他种类
  • 抽象工厂模式的核心思想是:如果把抽象工厂作为一级,内部是一个一个产品类。那么接下来的二级类就是一个一个的产品族,比如把腾讯、阿里,在二级类中,创建他们一个一个的产品生产
public interface DessertFactory {Coffee createCoffee();Dessert createDessert();
}
//美式甜点工厂
public class AmericanDessertFactory implements DessertFactory {public Coffee createCoffee() {return new AmericanCoffee();}public Dessert createDessert() {return new MatchaMousse();}
}
//意大利风味甜点工厂
public class ItalyDessertFactory implements DessertFactory {public Coffee createCoffee() {return new LatteCoffee();}public Dessert createDessert() {return new Tiramisu();}
}

http://www.mrgr.cn/news/48269.html

相关文章:

  • WebRTC服务质量(07)- 重传机制(04) 接收NACK消息
  • C#代码实现把中文录音文件(.mp3 .wav)转为文本文字内容
  • 随时随地编码,高效算法学习工具—E时代IDE
  • 【数据分析】层次贝叶斯
  • QT打包【非单个exe】
  • TCL发布万象分区,再造Mini LED技术天花板
  • 前端面试题“请说说你对 TS 中装饰器的理解“
  • 《标题的力量:在计算机科学中的多元应用》
  • Python从入门到高手6.2节-字符串操作符详解
  • 前端_003_js扫盲
  • 同步和异步的区别
  • 最大二进制奇数 。
  • 定位、地图建立及管理合集
  • 初级学习:Python实现AI并搭建
  • 低代码工单管理app评测,功能与效率解析
  • python各版本新特性简单梳理
  • 如何使用bpmn-js实现可视化流程管理
  • react理念(二)
  • (29)数字信号处理中正弦波的表示
  • 【Python】学习笔记
  • 筛选因数快速法+map
  • 华罗庚名著《数论导引》
  • 如何启动hive
  • 初学Java基础Day17---面相对象之访问修饰符,初识Object,final关键字
  • 深入理解 Java HashMap 的 get() 方法及其相关实现
  • 事件轮询机制