手写设计模式练习,用一个咖啡厅的例子,学习所有的设计模式
通过工厂模式,创建咖啡厅的饮品
通过抽象工厂模式,创建咖啡厅的饮品
通过建造者模式,创建一份菜单
通过原型模式,复制一杯饮品
单例模式,咖啡厅只能有一个
- 用一个门面来统一的处理请求,将复杂的信息归一化
例如咖啡厅的前台要负责点单,客人点单的菜品可能存在多种,但都通过前台
假设这家咖啡厅以前只提供热咖啡,但现在为了拓宽业务,它开始提供冰咖啡。现有的咖啡机只能制作热咖啡,而制作冰咖啡的过程略有不同。但是咖啡厅不想购买新的咖啡机。 在这种情况下,可以引入一个“冰咖啡适配器”来适配现有的咖啡机,使其能制作冰咖啡。
访问者要解决的核心事项是,在一个稳定的数据结构下,例如用户信息、雇员信息等,增加易变的业务访问逻辑。为了增强扩展性,将这两部分的业务解耦的一种设计模式。
咖啡厅的人员分为顾客和员工,顾客和员工都有身份,顾客:VIP或普通顾客,员工:实习工和正式工 咖啡厅的人员还有其他属性,顾客有消费金额,员工有工资 咖啡厅的访问者包括:老板和游客 老板可以访问身份和名称,而游客只能访问名称
桥接模式(Bridge Pattern)是一种结构型设计模式,其目的是“将抽象与实现解耦,使得两者可以独立地变化”。这个模式是为了应对类自身具有两种以上的变化维度时使用的,以避免出现“类爆炸”的问题。在桥接模式中,抽象(Abstraction)和实现(Implementation)不是一体的,而是可以独立扩展。
咖啡厅和社团联合举行校园活动 校园活动分为问答活动和桌游活动,可以通过咖啡厅和社团两种渠道报名和参加 从咖啡厅渠道参加活动可以赠送一杯咖啡,从社团渠道参加可以赠送奖品
组合模式,将对象组合成树形结构以表示“部分-整体”的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。
咖啡厅的人员架构图
- 当需要给一个现有类添加附加职责,而又不能采用生成子类的方法进行扩充时。例如,该类被隐藏或者该类是终极类或者采用继承方式会产生大量的子类。
- 当需要通过对现有的一组基本功能进行排列组合而产生非常多的功能时,采用继承关系很难实现,而采用装饰器模式却很好实现。
- 当对象的功能要求可以动态地添加,也可以再动态地撤销时。
咖啡厅的前台小姐姐突然离职,现在收银的工作交接给了做咖啡的员工,所以要在做咖啡的基础上添加收银的工作。
- 享元模式(Flyweight Pattern)是一种用于优化内存使用和计算性能的设计模式。它通过共享尽可能多的与对象相关的数据来最小化系统中对象的数量。享元模式主要用于减少创建对象的数量,以减少内存占用和提高性能。
在一个咖啡厅里,有多种咖啡,比如拿铁、美式、卡布奇诺等。每种咖啡都有一些共享的属性(如咖啡豆的种类、研磨方式等),也有一些非共享的属性(如糖量、牛奶量等)。
-
请求的发送和接收解耦,让多个接收对象都有机会处理这个请求。将这些接收对象串成一条链,并沿着这条链传递这个请求,直到链上的某个接收对象能够处理它为止。
-
在职责链模式中,多个处理器(也就是刚刚定义中说的“接收对象”)依次处理同一个请求。一个请求先经过A处理器处理,然后再把请求传递给B处理器,B处理器处理完后再传递给C处理器,以此类推,形成一个链条。链条上的每个处理器各自承担各自的处理职责,所以叫作职责链模式。
店长先向校领导申请新咖啡豆的采购预算,批准后执行采购,采购后和店员讨论试做新品,通过后再进行上架试运行,试运行过程中受到顾客的反馈后决定是否加入菜单。