设计模式
文章平均质量分 81
贝壳的世界
我是一名程序员,希望通过博客和大家交流技术
展开
-
设计模式:装饰模式
背景 有一个奶茶点餐系统,当顾客点完茶之后,计算出顾客需要支付的价格。 目前系统提供2种茶:苹果茶和芒果茶,系统实体关系如下: (1)Tea:抽象父类,所有具体类都需要继承,提供2个抽象方法。 (2)AppleTea和MangoTea:具体类,实现description和price方法。 比如,当顾客点了苹果茶,系统调用AppleTea的price方法,计算出顾客需要支付10元。 为了给顾客更多选择,增加了2种配料:珍珠和椰果,顾客可以任意搭配。 现在请你重新设计系统:最终需要支付的价格原创 2022-01-27 17:25:31 · 330 阅读 · 0 评论 -
设计模式:策略模式
背景 有一款鸭子游戏,系统中有很多种类的鸭子,所有鸭子都会游泳和呱呱叫。类图如下: 现在需要给鸭子添加飞行动作,让鸭子可以飞起来。 第1版实现 在父类Duck中新增fly方法,实现鸭子的飞行动作。 游戏运行之后发现,有一只橡皮鸭也飞了起来,橡皮鸭怎么会飞呢? 问题:并不是所有的鸭子都会飞,如果让不会飞的鸭子拥有飞行动作就会很奇怪 这个好解决:在所有不会飞的鸭子类中重写fly方法,什么也不做 如果系统中还有N(可以想象N很大)种鸭子不会飞,就得重写N个类,工作量好像有点大 那有没原创 2022-01-26 17:06:49 · 247 阅读 · 0 评论 -
设计模式:观察者模式
背景 需求:将气象站的数据显示在布告板上。如下图所示: (1)气象站:由WeatherStation类表示,有3个属性(温度、湿度、气压),当气象站的数据有变化时,会调用measurementsDidChanged方法。 (2)布告板:由CurrentDisplay类表示,调用update方法来刷新布告板的数据。 第1版实现 在WeatherStation类中新增CurrentDisplay属性display,当气象数据变化时,在measurementsDidChanged方法中调用dis原创 2022-01-17 20:14:21 · 107 阅读 · 0 评论