最近在看《大话设计模式》,做一点总结总结吧。
之前也进行学习过设计模式,但是都是讲该设计模式是什么,包含哪些元素,再配合一点简单的demo,理解很不深刻。最近又重新学一下。
简单工厂模式
在这本书中由案例写一个计算器引入,按照我们的思维就是根据题意写出对应的需求,但是对于后面的维护这些考虑的就很少了,顶多把计算的过程封装成一个函数(这是我目前思维),后面大鸟开始说我如果开始增加计算功能呢?例如增加计算一个数的平方根,你还要去修改原来计算的代码,增加对应的操作。那每次变化都要对该类进行修改。这个时候就引入了简单工厂模式。
创建一个抽象类为父类,里面包含变量有num1,computation,num2,方法getResult()。
子类:加法类、减法类、乘类、除类、开方类。
如果再想增加计算操作,直接创建对应的子类即可。
感觉就是将抽象类父类是一个生产工厂,可以创建功能类似的各个类,每个类内部去进行具体的操作
策略模式
在本书中由案例写一个商场计算商品金额的系统引入,我很自然想的很简单,那就是商品总数*商品单价,之后再进行累加操作。(写在一个类中,在封装一个计算商品金额方法就行了)
大鸟后面说那现在商场进行活动促销,满300-100呢?
那我想的就是在计算商品金额的方法多加一个参数,计算的时候判断一下是正常计算还是进行满减计算,返回最终用户应该支付的金额。
大鸟后面说如果商场进行8折活动呢?以后可能还会有7、6折等活动?
如果这样的话我每次都要去修改计算商品金额的方法。
但是这时突然想起了开放封闭原则,在需求增加时只需要向系统中加入新的功能实现类,而原有的一切保持封闭不变的状态,这就是基于抽象机制而实现的开放封闭式设计。
在本书中,使用简单工厂+策略模式相结合: 创建了一个类A,类A里面定义父类变量B,并且根据输入的活动类型进行选择合适的子类(正常收费、打折收费、返利收费)进行运算。
策略模式是用来封装算法的,用它来封装几乎任何类型的规则,只要在分析过程中听到需要在不同时间应用不同的业务规则,就可以使用侧罗模式来处理这种变化的可能性
单一职责原则
就一类而言,应该仅有一个引起它变化的原因。
软件设计真正要做的内容,就是发现职责并把那些职责相互分离。如果你能够想到多于一个的冬季去改变一个类,那么这个类就是具体有多一个的职责,这个时候就应该考虑类的职责分离。