# 七大设计原则
# 前置相关
# 开闭原则(Open Close Principle)
开闭原则的意思是:对扩展开放,对修改关闭。在程序需要进行拓展的时候,不能去修改原有的代码,实现一个热插拔的效果。简言之,是为了使程序的扩展性好,易于维护和升级。想要达到这样的效果,我们需要使用接口和抽象类,后面的具体设计中我们会提到这点。
# 单一职责原则(Single Responsibility)
定义
有且仅有一个原因引起类的变更
单一职责存在争议
对类职责的定义,什么是类的职责,一记怎么划分类的职责
注意
对于接口设计的时候要做到单一,但是对于实现类就要多方面考虑了
单一职责的适用范围
类、接口、方法
总结
接口一定要做到单一职责,类的设计尽量做到只有一个原因引起变化
# 里氏替换原则(Liskov Substitution Principle)
- 继承的优缺点
- 优点、
- 代码共享
- 提高重用
- 子类可以形似父类又异于父类
- 提高代码的可扩展性
- 提高产品或者项目的开放性
- 缺点
- 继承是侵入性的
- 降低代码的灵活性
- 增强了耦合
- 优点、
- 定义有两种
- 对每一个类型为S的的对象O1,都有类型为T的对象O2,程序P的行为没有发生变化,那么类型S是类型T的子类型
- 所有引用基类的地方必须透明地使用其子类对象
- 一个定义四层含义
- 子类必须完全实现父类的方法
- 如果子类不能完整地实现父类的方法,或者父类的某些方法在子类中已经发生畸变,则建议断开父子继承关系,采用依赖、聚集、组合灯关系代替继承
- 子类可以由自己的个性
- 覆盖或者实现父类的方法输入参数可以被放大
- 子类中方法的前置条件必须与超类中被覆写的方法前置条件相同或者更宽松
- 覆写或实现方法时输出结果可以被缩小
# 依赖倒转原则(Dependence Inversion Principle)
这个原则是开闭原则的基础,具体内容:针对对接口编程,依赖于抽象而不依赖于具体。
# 接口隔离原则(Interface Segregation Principle)
这个原则的意思是:使用多个隔离的接口,比使用单个接口要好。它还有另外一个意思是:降低类之间的耦合度。由此可见,其实设计模式就是从大型软件架构出发、便于升级和维护的软件设计思想,它强调降低依赖,降低耦合。
# 迪米特法则,又称最少知道原则(Demeter Principle)
最少知道原则是指:一个实体应当尽量少地与其他实体之间发生相互作用,使得系统功能模块相对独立。
# 合成复用原则(Composite Reuse Principle)
合成复用原则是指:尽量使用合成/聚合的方式,而不是使用继承。
# 设计模式的类型
| 序号 | 模式&描述 | 包括 |
|---|---|---|
| 1 | 创建型模式这些设计模式提供了一种在创建对象的同时隐藏创建逻辑的方式,而不是使用新的运算符直接实例化对象。这使得程序在判断针对某个给定实例需要创建哪些对象时更加灵活。 | 工厂模式(FactoryPattern)抽象工厂模式(AbstractFactoryPattern)单例模式(SingletonPattern)建造者模式(BuilderPattern)原型模式(PrototypePattern) |
| 2 | 结构型模式这些设计模式关注类和对象的组合。继承的概念被用来组合接口和定义组合对象获得新功能的方式。 | 适配器模式(AdapterPattern)桥接模式(BridgePattern)过滤器模式(Filter、CriteriaPattern)组合模式(CompositePattern)装饰器模式(DecoratorPattern)外观模式(FacadePattern)享元模式(FlyweightPattern)代理模式(ProxyPattern) |
| 3 | 行为型模式这些设计模式特别关注对象之间的通信。 | 责任链模式(ChainofResponsibilityPattern)命令模式(CommandPattern)解释器模式(InterpreterPattern)迭代器模式(IteratorPattern)中介者模式(MediatorPattern)备忘录模式(MementoPattern)观察者模式(ObserverPattern)状态模式(StatePattern)空对象模式(NullObjectPattern)策略模式(StrategyPattern)模板模式(TemplatePattern)访问者模式(VisitorPattern) |
| 4 | J2EE模式这些设计模式特别关注表示层。这些模式是由SunJavaCenter鉴定的。 | MVC模式(MVCPattern)业务代表模式(BusinessDelegatePattern)组合实体模式(CompositeEntityPattern)数据访问对象模式(DataAccessObjectPattern)前端控制器模式(FrontControllerPattern)拦截过滤器模式(InterceptingFilterPattern)服务定位器模式(ServiceLocatorPattern)传输对象模式(TransferObjectPattern) |
# 图示设计模式关系
