实现一个商场的收银程序,根据商品单价、数量,计算总价,生成小票。
关于计价算法,属于经常会变化的部分,比如今天打八折,明天满300减100,后天又打75折等等
先是使用了上一章的简单工厂模式,一个父类提供一个计算总价的方法,不同的计价方法继承这个父类,比如打8折子类,满300减100子类,等等。
面向对象编程,并不是类越多越好,类的划分是为了封装,具有相同属性和功能的对象的抽象几何才是类。
提供一个计费工厂,来创建计费子类的实例,工厂里面和第一章一样,使用switch来判断。
这样可以实现这个需求,但是,简单工厂解决的是对象的创建问题,而且此处的工厂包括了所有的收费方式,商场可能会经常的改变计费方式,这样维护和扩展都需要将工厂重新编译,所以这不是最好的办法。(这里没看懂)
面对经常变动的算法 -- 策略模式。算法是随时可以互相替换的,这就是和上一章简单工厂模式的区别。
(这是策略模式图)
策略模式和在上下文context中,switch来选择创建具体的策略子类,就是把这个上下文context当作工厂来使用,这样就是简单工厂模式和策略模式结合使用了,只需要向客户端暴露一个上下文类即可。
策略模式是一种定义一系列算法的方法,所有这些算法都是完成相同的工作,只是实现不同,它可以用相同的方式调用所有的算法。(这里也没看懂)
老实说这一章讲的吧,我觉得并没有让我很信服策略模式,现在就当入个门,等以后看了其他好书了,再来思考这一章。
网友评论