• 大话设计模式读书笔记--2.策略模式


    面向对象的编程,并不是类越多越好,类的划分是为了封装,但分类的基础是抽象,具有相同属性和功能的对象的抽象集合才是类

    定义

    它定义了算法家族,分别封装起来,让他们之间可以相互替换,此模式让算法的变化,不会影响到使用算法的客户

    生活中例子: 穿衣服

    已有的衣服: 内裤 ,外裤
    已有的功能: 正常人的风格, 既先穿内裤在穿外裤
    要添加的功能: 超人风格, 既先穿外裤在穿内裤

    穿衣顺序的不同, 装扮成不同的风格

    把所需的功能按正确的顺序串联起来进行控制,这就需要用到策略模式了

    模式结构

    Strategy: 定义所有支持算法的公共接口

    ConcreteStrategy: 封装了具体的算法或行为,也就是具体的策略

    Context:是算法对象工厂, 维护一个Strategy对象的引用, 产生具体算法对象

    模式实现

    场景:模拟商城收银软件,营业员根据客户所购买商品的单价和数量,向客户收费,优惠活动为打8折和满100返10块

    场景分析:

    业务不变的点: 获得总金额(结果)
    
    业务变化点: 如何计算总金额(具体行为)

    下载代码,解压后如下图:

    优缺点

    优点:1.Strategy是抽象父类,继承有助于提取出算法中的公共功能

           2.简化了单元测试,每个算法都有自己的类,可以单独测试

    缺点:本例中,使用了是简单工厂模式+策略模式

           1.客户端需要知道所有的策略类

    使用场景

    在不同的时间,应用不同的业务规则, 但是目的是一样的

  • 相关阅读:
    类型转换
    Java中this和super的用法总结
    关于网页乱码问题
    用cookie实现记住用户名和密码
    Before start of result set
    jsp页面错误The attribute prefix does not correspond to any imported tag library
    MySql第几行到第几行语句
    servelet跳转页面的路径中一直包含sevelet的解决办法
    <a>标签跳转到Servelet页面并实现参数的传递
    解决网页乱码
  • 原文地址:https://www.cnblogs.com/liuconglin/p/6397130.html
Copyright © 2020-2023  润新知