软件设计模式(二)

本章学习主要参照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进行处理,非常感谢!

上一篇 2022年11月14日
下一篇 2022年11月15日

相关推荐