一、 面向对象设计原则
共7个,这些原则相互依赖,相互补充,但不能全用。
1. 单一职责原则
(1) 类要单一职责(因为承担职责越多,可复用性越小)。
(2)仅有一个引起它变化的原因(如打电话:dial, connect, disconnect, send, receive)。
2. 开闭原则(或 对可变性封装原则)
(1)在不被修改的时候被扩展(如只修改config.xml里的配置,无需修改代码)。
(2)关键:抽象化。
(3)通过重构实现。
3. 依赖倒转原则
(1)高层模块不应该依赖低层模块,应该依赖抽象。
(如config.xml:<class_name>CircleButton<class_name>——>LoginForm:button: AbstructButton——>CircleButton、RectangleButton)
(2)抽象不应该依赖细节,细节应该依赖抽象。
(3)要针对接口编程,不针对实现编程(要面向接口,而不是面向具体对象。接口里仅放数据,不放行为)。
(4)类之间采用抽象耦合。
4. 里氏代换原则
(1)尽量使用基类定义对象(使用基类的地方都能使用子类)。
(2)是实现开闭原则的重要手段。
… …
二、设计模式分类
(去github或gitee上搜“design pattern”)
1. 创建型:创建对象。
2. 结构型:处理类或对象的组合。
3. 行为型:描述类或对象的交互、分配职责。
三、一些模型
1. 简单工厂模式
(1)举例:
banana——>工厂——>🍌
圆形按钮——>工厂——>CircleButton
(2)代码实现:通过枚举enumeration判断用户输入的字符是什么,再switch…case。
(3)适用范围:产生的产品是确定的;工厂往往比较小,只生产某些小方面的产品;产品的包装过程复杂。
(4)优点:用户无需关心创建的细节。
2. 建造者模式
(1)建造的对象是复杂的(从产品的组件开始建造,再组装合成产品)。
(2)优点:用户只需给出复杂对象的类型。
用户——>宝马汽车(——>方向盘;轮胎;发动机)
(3)缺点:只能生产差异不大的产品。
3. 单例模式
(1)保证一个类只有一个实例(如QQ电脑端同一账号只能等登录一个)。
(2)实现方式:私有的构造函数+私有的成员变量+公有的静态工厂方法。
4. 外观模式(或 对象结构型模式)
(1)用户只需与外观角色交互(外观角色是一个类,其内部很复杂)(如电源总开关,不必单独操控电灯开关、电扇开关…)。
(2)不要通过外观增加子系统的行为。