学习了设计模式的前两章,对简单工厂模式和策略模式做一下总结。
什么是简单工厂?
简单工厂是面向对象的过程,包括:封装、继承和多态。
第一步:封装,即抽象出超类;(现金收费抽象类)
第二步:继承,即子类继承超类;(继承“现金收费抽象类”得到“正常收费子类、打折收费子类、返利收费子类”)
多态,体现在这些不同的子类中,如用同样的acceptCash方法,分别作用于“正常收费子类、打折收费子类、返利收费子类”,Return不同的结果。
第三步:简单工厂,即实例化子类,返回子类;(如new CashNormal)
第四步:客户端:1、通过工厂确定收费类型;(return cs)2、通过应用收费类型的方法,返回结果。
什么是策略模式?
策略模式是在简单工厂的基础上,进一步封装变化得到的。
第一步:封装,即抽象出超类;(现金收费抽象类)
第二步:继承,即子类继承超类;(继承“现金收费抽象类”得到“正常收费子类、打折收费子类、返利收费子类”)
多态,体现在这些不同的子类中,如用同样的acceptCash方法,分别作用于“正常收费子类、打折收费子类、返利收费子类”,Return不同的结果。
第三步:策略模式,即实例化子类,返回子类的方法;(如new CashNormal)
第四步:客户端:1、通过策略模式,确定收费类型,并返回结果。(return cs.acceptCash(money))
策略模式 VS. 简单工厂
策略模式是优化简单工厂得到的,在两种模式都适合时,那么理所应当的,策略模式要比简单工厂强。
但是,简单工厂的应用比较广泛。策略模式是封装变化的,也就是说在遇到“在不同时间应用不同业务”这样的变化的情况时,应用策略模式来封装这些变化,使得客户端耦合度降低,此种情况下会比简单工厂强。
从以上的两幅图中,大家也可以看出不同来,简单工厂是依赖,而策略模式是聚合。简单工厂依赖了所有子类,而父类聚合出了Context,显然,策略模式的耦合要明显降低。
感受:
学习设计模式,感觉很有意思。他的思维方式很值得我们学习,但是,要想理解他,需要我们反复学习。就前两章,我就反复理解了好几遍,才有了点头绪,体会到了其中的滋味。之前,我花两天时间浏览了正本书,感觉其他设计模式都和简单工厂有关系,故在前两章停留的时间长了一些,之后,我也该加快脚步了。