zoukankan      html  css  js  c++  java
  • 设计模式-策略模式1

    * 假设:

    * 你发现要为一家商店设计一个具有收银打折的软件

    * 那么,如何设计才算是最好的呢?

    * 我们应该考虑到将来的功能的扩充,以及一些商品打折的比例

    *

    * 现在先考虑一下 如何打折?

    * 比如: 商店的客户只有三种 : 普通用户,白金用户,钻石用户(今后也许还会有VVVIP)

    * 客户的身份不同折扣也不同

    *

    * 显然,如果写在一个类里面是万万不行的 PS : 单一职责

    于是我们很想把每种情况作为一个单独的类.但是为了统一他们的行为,还需要一个公共的方法(可以使用接口或者是抽象类实现)

    这已经基本符合策略模式了:

    定义一系列的算法,把他们一个个封装起来,并且使他们可以相互的替换.本模式的算法可以独立于客户端而变化

    clip_image002

    clip_image004

    clip_image006

    clip_image008

    clip_image010

    clip_image012

    PS:但是针对于这个打折的系统,这还不算是最好的结果,因为你还需要在客户端去new对象,这是很不符合逻辑的,假设我在运行这个程序,

    main里面已经new了白金客户那么这个客户端只能使用白金客户的打折

    如果只是new了钻石的只能按照钻石的打折.

    也许你会想我可以该代码….

    PS :亲~,你知道这个程序将来要是交给营业员,那么他们还需要知道java语言,来需要修改,编译,,,,!

    也许你还会想到在main里面添加if-ekse

    PS :嗯,这是个好办法, 但是我们还有更好的方式解决----工厂方法….大话设计模式的前几张有对它的解决方式,又兴趣的请留言探讨.

    我心匪石,不可转也。我心匪席,不可卷也。
  • 相关阅读:
    让源码包apache服务被服务管理命令识别
    zabbix客户端监控脚本shell
    zabbix指定版本自动化安装脚本shell
    haproxy配置详解
    HAproxy 让后端RS记录真实IP
    Centos 7.x系统下忘记用户登录密码,重置root密码的方法
    Win2008 server R2重置登录密码Administrator
    序列自动机总结与例题
    整体二分总结
    容易推错的式子
  • 原文地址:https://www.cnblogs.com/greentomlee/p/4006478.html
Copyright © 2011-2022 走看看