zoukankan      html  css  js  c++  java
  • 设计模式(3)

    在第二篇日志中我们完成了一个初级的入门模式:简单工厂模式。现在应客户需求咱来完成一个简单的商场收银软件,营业员根据客户所购买的产品的单价和数量,向客户收费。用两个文本框来输入单价和数量,一个确定按钮来算出每种商品的费用,用个列表框来记录商品的清单。为了适应市场的需求,有时候为了商场的盈利、吸引更多的顾客,商场会举行一系列的活动,诸如:满300返100、满700返200、满200送50等、这样的在此项目中变化的算法的变化、咱用简单工厂模式来封装此变化点。

    咱来分析这个项目:面向对象的编程,并不是类越多越好,类的划分是为了封装,但分类的基础是抽象。具有相同属性和功能的对象的抽象类的集合才是类。所以在这个项目中,打一折和打九折只是形式的不同,抽象分析出来,所有的打折算法都是一样的,所以打折算法应该是一个类。

    简单工厂方法中:

    图片

    此方法用于所有算法的抽象类

    图片

    抽象方法的具体算法、继承与算法类

    图片

    我们添加此方法类的抽象工厂、根据传入的对象实例化相应的算法。

    客户端调用相应的方法:

    图片

    图片

    利用简单工厂模式我们已经完成了这个软件的基础构架,现在面临的问题来了,当商场举行打五折和满500送200的促销活动的时候怎么办?

    我们可能采取这样的模式在收费工厂中加两个条件,在界面的下拉选项中加两项,就可以了,现在的需求是满足了,但是需求总会是变得

    现在商场又举行促销活动,满100积分和10点,以后积分到一定的时候可以领取奖品。咱如果在增加相应的算法,这样会形成类的堆积,毕竟活动的举行只是短暂的几天的时间,而且经常性的更改打折额度和返利额度,每次维护和扩展收费方式都有改动这个工厂,以致代码需要重新编译和部署,这样真的是一种很糟糕的处理方式,所以用它不是最好的办法,面对算法的时常变动,我们有更好的处理方式。

    嘿嘿、到此我们已经完成设计模式的初步入门、兴奋中......

    注:文章来源于书中,自己纯属总结,且做练习只用。

  • 相关阅读:
    Recyclerview设置间距
    Python-socket / socketserver
    服务器存储空间不足,无法处理此命令
    gitbucket
    一些好用的Linux命令组合
    Python socket模块
    用Python在局域网根据IP地址查找计算机名
    thinkpad开机引导方式变成PCI LAN选项解决
    ipython安装
    python xml
  • 原文地址:https://www.cnblogs.com/zhijianliutang/p/2250623.html
Copyright © 2011-2022 走看看