设计模式总结

2019/5/31 posted in  设计模式

面向对象编程几年了,一直没有总结一下设计模式,现在略总结一下。
设计模式其实是一直编程方法和思想,为了是代码的维护性,可扩展性,复用性和灵活性,是前人总结出来的代码最佳实践。
接下里的总结几乎没有代码,是粗略描述各个设计模式使用的思想和场景。

策略模式

该模式是为了定义一个统一的游戏规则。比如:商品打折的规则。不同的商品折扣不一样,在代码中,我们可以使用if else来判断哪种商品打多少折。但是这样会出现的情况是,后期增加了新的打折规则,代码已经封装或者打包出去了,需要自己实现一个新的规则,怎么办?如果改源码,涉及的问题还是比较多的,也许会发生未知错误。而且违反开闭原则。所以这里就可以使用策略模式。我们定义一个【规则】接口,但是不规定【规则】的详细内容,让【详细规则】类实现这个【规则】接口。不同【详细规则】实现的规则不一样。这样,当根据业务实现同一个规则不同规则详情的时候,就可以实现那个【规则】接口,不改变原来的代码,对扩展开放,对修改关闭。

装饰器模式

该模式主要是扩展对象的功能。就像打游戏的时候,选择人物自定义形象一样。可以自己添加肤色,发型,眼睛大小,耳朵大小等等。举个编程的例子:我们在一个Person类中,定义一个说话的方法speak(),当它会英语的时候,我们在speak方法中打印<英语>两个字;当它会汉语的时候,我们在speak方法中打印<汉语>两个字;当它会日语的时候,我们在speak方法中打印<日语>两个字。那么问题来了,当它会一种语言的时候,我们就要在speak方法中添加一个打印,就要修改一次speak()方法。违背开闭原则。此时,装饰器模式登场了。装饰器模式中,涉及到装饰器和被装饰的对象。他们都要实现同一个接口,接口里至少一个方法,比如上面说的speak()。这个模式主要是增强对象的功能,因为我们写代码的时候不可能把所有功能场景实现完,可以使用这个模式,以后增加对象功能的时候,就不用修改原来的类。

观察者模式

观察者模式,顾名思义,就是观察对象是否改变。这里涉及到观察者和被观察者。这种使用场景比如天气预测中,检测到气温超过30度,就要发出警报。这里就可以使用观察者模式。这里要分清楚观察者和被观察者,用报纸发布订阅来解释。客户是订阅报纸,收报纸的人( 收通知 ),所以客户就是观察者,报社就是被观察者。这里Java 已经为我们提供观察者模式所需要的类:Observer 类和 Subject 类,只不过在 Java 中 Subject 不叫 Subject,而叫 Observable。前端VUE的MVVM思想,就是观察者思想,他们相互观察。

适配器模式

未完待续。。。。。