SDP-软件设计模式
- 设计原则
- 一、开闭原则 OCP
- 二、里氏替换原则 LSP
- 三、依赖倒置原则 DIP
- 四、单一职责原则 SRP
- 五、接口隔离原则 ISP
- 六、迪米特法则 LoD
- 七、合成复用原则 CRP
- 设计模式
- 创建型模式 Creational Patterns
- 结构型模式 Structural Patterns
- 行为型模式 Behavior Patterns
- 设计语言
设计原则
一、定义 提高软件系统的可维护性、可复用性、可扩展性、灵活性的七条原则
二、内容
[1]开闭原则 Open Closed Principle 使用继承 子类与基类相同点
[2]里氏替换原则 Liskov Substitution Principle 继承避免重写 子类与基类不同点
[3]依赖倒置原则 Dependence Inversion Principle 面向接口编程 模块交互通过公约
[4]单一职责原则 Single Responsibility Principle 约束类
[5]接口隔离原则 Interface Segregation Pinciple 约束接口
[6]迪米特法则 Law of Demeter
[7]合成复用原则 Composite Reuse Principle
三、软件实体
[1]模块
[2]类、接口
[3]方法
一、开闭原则 OCP
一、定义 使用继承 = 扩展开放,修改关闭
二、含义 需求改变时,在不修改源码前提下扩展模块功能,使其满足新的需求
三、作用
[1]软件测试 原有代码不测,扩展代码测试
[2]代码复用 粒度越小,抽象编程,提高复用
[3]软件维护 易于扩展维护
四、实现 抽象约束,封装变化
[1]抽象层 保持软件架构稳定 接口、抽象类
[2]具象层 根据需求派生实现类 实现类、派生类
五、示例
[1]Abstract Subject抽象类 桌面
[2]Specific Subject具象类 主题A、主题B
二、里氏替换原则 LSP
一、定义 扩展继承 = 子类扩展父类,避免重写父类
二、含义 继承的使用场景
三、作用
[1]实现开闭原则,反应基类与子类的关系
[2]克服继承问题,重写父类造成的可复用性变差
[3]保证动作正确,扩展不会引入新的错误
四、实现 子类扩展父类,不能改变父类
[1]子类新增方法 支持
[2]子类重写方法 避免
五、示例 几维鸟不是鸟,取消原来继承关系,定义高级父类
[1]错误关系 鸟[]:几维鸟[重写飞行]
[2]修正关系 动物:几维鸟
三、依赖倒置原则 DIP
一、定义
[1]高层模块不依赖底层模块,两者依赖抽象
[2]抽象不依赖细节,细节依赖抽象
二、含义 以抽象为基础搭建架构
[1]抽象 接口、抽象类 制定规范、契约
[2]细节 实现类 展现细节
三、作用
[0]实现开闭原则,降低客户与实现模块的耦合
[1]降低类间耦合性
[2]提高系统稳定性
[3]减少并行开发风险
[4]提高可读性可维护性
四、实现 面向接口编程,而非面向实现编程
[1]每个类 尽量提供接口、抽象类,而非具体类
[2]变量类型 尽量声明接口、抽象类
[3]使用继承 遵守LSP
五、示例 顾客购物程序
[1]抽象网店 Shop.sell()
[2]具象网店 ShopA.sell()、ShopB.sell()
[3]顾客 Customer.shopping( shopA.sell(),shopB.sell() )
四、单一职责原则 SRP
一、定义 一个类有且仅有一个引起变化的原因,否则应该拆分
二、含义 约束类,针对实现、细节
控制类的粒度,解耦对象,提高内聚性
三、作用
[1]降低类复杂度
[2]降低变更风险
[3]提高类的可读性、系统可维护性
四、实现 分离职责、封装类、模块
五、示例 学生工作管理程序
[1]学生工作 生活辅导()、学业指导()
[2]辅导老师 生活辅导()
[3]学业老师 学业指导()
五、接口隔离原则 ISP
http://c.biancheng.net/view/1330.html
一、定义 要为各个类建立专用接口
二、含义 约束接口,针对抽象、整体框架
三、作用
[1]
[2]
[3]
[4]
[5]
四、实现
五、示例
六、迪米特法则 LoD
最少知识原则 Least Knowledge Principle
一、定义
七、合成复用原则 CRP
组合/聚合复用原则 Composition/Aggregate Reuse Principle
一、定义 软件复用,优先使用组合、聚合等关联关系,其次考虑继承关系;
设计模式
一、定义 解决设计问题的方案模板
二、本质 在约束条件下,完成程序目标的设计方案
三、要素
[1]模式名称 PatternName
[2]问题 Problem 适用环境,约束条件
[3]解决方案 Solution 组成部分,各自职责,相互关系,协作方式
[4]效果 Consequence 时间空间、灵活性、扩充性、可移植性
[5]动机
[6]结构
[7]模式角色
[8]合作关系
[9]实现方法
[10]模式扩展
[11]相关模式
[12]已知应用
[13]例程
[14]适用性
四、分类
[一]根据作用范围划分
[1]类模式 处理父类与子类关系,通过继承实现,编译时固定 静态【继承】
[2]对象模式 处理对象与对象关系,通过聚合实现,运行时可变 固态 【聚合】
[二]根据目的划分
[1]创建型模式 分离对象的创建、使用
[2]结构型模式 组合类、对象的复杂结构
[3]行为型模式 协调类、对象的复杂任务,分配职责
五、分析思路:
[1]约束条件
[2]程序目标
[3]
六、目的
[1]通用
[2]复用
创建型模式 Creational Patterns
一、类模式
[1]工厂方法模式 Factory Pattern
二、对象模式
[2]单例模式 Singleton Pattern
[3]原型模式 Prototype Pattern
[4]抽象工厂模式 Abstract Factory Pattern
[5]建造者模式 Builder Pattern
结构型模式 Structural Patterns
一、类模式
[1]适配器模式_类 Adapter Pattern
二、对象模式
[2]适配器模式_对象 Adapter Pattern
[3]代理模式 Proxy Pattern
[4]桥接模式 Bridge Pattern
[5]装饰模式 Decorator Pattern
[6]外观模式 Facade Pattern
[7]享元模式 Flyweight Pattern
[8]组合模式 Composite Pattern
行为型模式 Behavior Patterns
一、类模式
[1]模板模式 Template Pattern
[2]解释器模式 Interpreter Pattern
二、对象模式
[1]策略模式 Strategy Pattern
[2]命令模式 Command Pattern
[3]状态模式 State Pattern
[4]责任链模式 Chain of Responsibilty
[5]迭代器模式 Iterator Pattern
[6]备忘录模式 Memento Pattern
[7]观察者模式 Observer Pattern
[8]中介者模式 Mediator Pattern
[9]访问者模式 Visitor Pattern
设计语言
一、定义 同一建模语言 Unified Modeling Language
二、
三、分类
[1]用例图
[2]类图
[3]对象图
[4]状态图
[5]活动图
[6]时序图
[7]协作图
[8]构件图
[9]部署图
四、语法
可见性
[1]Public +
[2]Private -
[3]Protected #
[4]Friendly ~
类图
一、类 Class
定义 具有相同属性、方法、关系的对象的抽象。
属性 封装数据、行为
表示 分割线矩形
[1]类名 Name
[2]属性 Attribute [可见性]属性名:类型[=默认值]
[3]操作 Operations [可见性]操作名:(参数列表)[:返回类型]
二、接口 Interface
定义 具有结构、抽象操作,没有属性;
属性 本身不可实例化,子类可以实现
表示 小圆圈
[1]接口名 Name
[2]操作 Operations [可见性]操作名:(参数列表)[:返回类型]
三、类图 ClassDiagram
定义 显示系统的类、接口的静态结构和关系、协作的静态模型
四、类间关系
[一]依赖关系 Dependency
属性 使用关系
组成 [1]虚线
[2]单箭头 使用类,指向依赖类
示例 人、手机
[二]关联关系 Association
属性 引用关系
组成 [1]实线
[2]n箭头 使用类,指向关联类
[3]两端标注 角色名
示例 老师、学生
[三]聚合关系 Aggregation
属性 关联关系 整体与局部has-a 局部可以脱离整体
组成 [1]实线
[2]空心菱形 指向整体
示例 大学、老师
[四]组合关系 Composition
属性 关联关系 整体与局部cxmtain-a 局部无法脱离整体
组成 [1]实线
[2]实心菱形 指向整体
示例 头、嘴
[五]泛化关系 Generalization
属性 继承关系 父类与子类is-a
组成 [1]实线
[2]空心三角箭头 指向父类
示例 人、学生+教师
[六]实现关系 Realization
属性 实现关系 接口与实现
组成 [1]虚线
[2]空心三角箭头 指向接口