设计模式-策略、装饰、代理

前言

本文为datawhale2022年12月组队学习《大话设计模式》task2打卡学习,内容主要以官方所提供为主,会加入一些个人的学习心得。
【教程地址】https://github.com/datawhalechina/sweetalk-design-pattern

一、策略模式

1.1 基本定义

策略模式(Strategy Pattern)是指定义一个算法家族,使得家族内的不同算法都遵从算法家族的接口及方法规范,从而可以实现算法间互相替换,且不会影响到使用算法的客户。
简单来说,就是提前准备好一组算法,将每一个算法的实现封装起来,在使用时进行互换。

1.2 问题引入

实现一个商场收银软件程序,营业员可以通过输入客户所有购买商品的单价和数量,程序自动计算出总金额。同时,商场有时会有打折活动(如商品打7折),或满减促销活动(如商品满300-100),程序应能考虑这些活动的情形,在尽量减少重复代码的前提下,实现正确的金额计算。

1.2.1 问题分析

对于打7折,打8折,满300-100,满700-200等商场的促销活动,其整体的业务逻辑是类似的,而且随时可以相互替换,符合策略模式的应用场景。

1.2.2 问题解决

  1. 首先创建抽象的算法类CashSupur,作为所有促销活动算法的抽象类,同时定义所有支持算法的公共接口,定义方法acceptCash()用于得到结果;
  2. 创建具体的促销算法类CashNormalCashRebate等,继承于抽象算法类CashSupur,覆写acceptCash()实现具体的促销算法;
  3. 创建上下文类CashContext,维护对算法对象的引用,使用时根据用户输入,传入一个具体的促销算法类来配置。

1.2.3 代码实现

这里不再多余进行复制粘贴了,直接放上datawhale所给的的源码链接:
策略模式Java实现
策略模式python实现

1.3 与简单工厂模式的区别

其实单看代码,直观给人感觉高度相似,没有什么区别,但是如果深入分析一下,其实还是有许多不同。

  • 首先看这两种模式的实现类:

简单工厂模式 :

# 简单工厂方法实现
class CashFactory(object):
    def create_cash_accept(self,typ):
        cs = CashSuper()
        if typ == "正常收费":
            cs = CashNormal()
        
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值