本章学习主要参照Datawhale开源学习及《大话设计模式》
第3章 设计模式
3.1 简单工厂模式
模式定义
简单工厂模式(Simple Factory Pattern)是用一个单独的类来实现具体的实例化过程,避免客户端对具体实例化过程的显式指定
结构组成
简单工厂模式由三类主要角色组成:
- 抽象类:定义所有支持算法的公共接口,在这个例子中具体运算抽象类;
- 具体算法类:具体的算法,在这个例子中具体为加减乘除运算类;
- 简单工厂类:维护对运算类的应用。
问题描述
要求用面向对象语言实现一个计算器控制台程序, 输入两个数和运算符 ,得到结果。要实现这一程序并不困难,但若未来该程序要增添新的运算符 ,而仍想使用这个程序的话,程序应当要设计得耦合性低些,尽量减少增加功能时需要的改动。同时,应该考虑把计算部分独立出来,这样如果未来该windows程序迁移到web版,计算部分也不需要修改。
解决方案
使用简单工厂模式来解决问题。
- 首先定义一个抽象的运算类Operation,定义抽象类的同时定义其所有子类的公共接口,并定义一个方法getResult(numberA,numberB)用于得到结果;
- 分别创造具体的加减乘除运算类,都为抽象运算类的子类,则具体运算类之中若有一者需要修改,不会影响其它的运算类。覆写具体运算类中getResult(numberA,numberB)方法实现运算操作;
-
适用场景
将类当做产品,则使用者可以在不清楚类生产的具体过程的情况下,使用不同的产品。
3.2 策略模式
模式定义
策略模式(Strategy Pattern)是指定义一个算法家族,使得家族内的不同算法都遵从算法家族的接口及方法规范,从而可以实现算法间互相替换,且不会影响到使用算法的客户。
结构组成
策略模式由三类主要角色组成:- 策略类:定义所有支持算法的公共接口,在这个例子中具体为收费抽象类;
- 具体策略类:具体的算法,在这个例子中具体为各类收费类和折扣优惠收费类;
- 上下文类:维护对策略对象的应用。
问题描述
要求实现一个商场收银软件程序,营业员可以通过输入客户所有购买商品的单价和数量,程序自动计算出总金额。同时,商场有时会有打折活动(如商品打7折),或满减促销活动(如商品满300-100),程序应能考虑这些活动的情形,在尽量减少重复代码的前提下,实现正确的金额计算。
解决方案
使用策略模式来解决问题。
- 首先创建抽象的算法类CashSupur,作为所有促销活动算法的抽象类,同时定义所有支持算法的公共接口,定义方法acceptCash()用于得到结果;
- 创建具体的促销算法类CashNormal,CashRebate等,继承于抽象算法类CashSupur,覆写acceptCash()实现具体的促销算法;
- 创建上下文类CashContext,维护对算法对象的引用,使用时根据用户输入,传入一个具体的促销算法类来配置。
代码实现
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!