[架构师训练营第 1 期] 第三周学习总结
面向对象编程(OOP)的目标是:编写出高聚低耦的程序,从而使程序能够易于复用、扩展和维护。
为了实现这个目标,前辈们提出了几个程序设计的原则:
开闭原则(OCP)
依赖倒置原则(DIP)
里式替换原则(LSP)
单一职责原则(SRP)
接口隔离原则(ISP)
为了贯彻这些原则,开发者们又发明了种种程序设计的模式,如:
工厂模式
单例模式
适配器模式
模板方法模式
策略模式
组合模式
装饰器模式
等等
凡是针对某一特定问题的可复用解决方案,并且满足解决方案的特征,就可被称为设计模式。
一个软件设计问题解决方案(设计模式)的特征(或一个设计模式的组成部分)包括:
方案名称
待解问题
方案内容——组成设计的元素,包括类和对象及其关系、职责和合作
结论——主要是对系统的影响,如伸缩性、扩展性、可移植性等
设计模式从功能上可以分为以下几类:
创建模式——类的实例化过程的抽象,解决类如何实例化问题
结构模式——类或对象组合过程的抽象,解决类或对象如何复用的问题
行为模式——不同对象职责划分过程的抽象,解决对象如何高聚低耦的问题
设计模式从方式上可以分为以下几类:
类模式——以继承的方式来实现模式(静态的)
对象模式——以组合的方式来实现模式(动态的)
在实际工作中,我比较常用的有:工厂模式、模板方法模式、策略模式、单例模式、装饰器模式等。
比如,为了让我们的物联网应用平台支持对接不同类型的设备或资源,使用了工厂模式。以下是工厂模式中某个类型设备的类的实例化配置,其中 entry
即类的路径,其他项为管理和实例化参数等:
框架预置了一些开箱即用的资源基类,如标准设备基类,它基于一套自研的公开协议对接满足该协议的设备(称为标准设备)。对于标准设备(一般是公司自己生产的设备)可直接引用(如以上代码1病床分机)。而对于非标准设备(如第三方提供的设备)则可以继承设备基类,扩展对接非标设备的实现,再将实现类的路径引用到该设备类型配置的 entry
里(如以上代码2 LED)。
以下(代码3-1、3-2)是工厂模式的实现代码核心片段:
同时,为了使模块更易于扩展,使用了模板方法模式。即在模块的基类定义了一些模板方法,包括:init()
、start()
、stop()
、get listeners()
等,供具体类继承实现并覆盖,而基类则负责调用这些模板方法实现对模块的生命周期管理、自动注册子类所需的监听器等。
以下代码 4 是模板方法模式的实现代码片段,代码 5 是子类(设备管理器)在实现过程中覆盖了 get listeners()
方法,从而实现对相关事件的监听和处理:
版权声明: 本文为 InfoQ 作者【猫切切切切切】的原创文章。
原文链接:【http://xie.infoq.cn/article/7b9c952449ae7e56b7785f23e】。文章转载请联系作者。
评论