设计模式(java源码实现)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

104 lines
4.4 KiB

5 years ago
# pattern
## pattern 介绍
23种设计模式(java源码实现) 来源于:《图解设计模式》
5 years ago
pattern 安装教程
1. jdk8
2. maven3
5 years ago
设计模式6个原则
5 years ago
摘抄博客:https://www.cnblogs.com/xiaobaizhang/p/7778494.html
```java
1. 单一职能
不要存在多于一个导致类变更的原因即一个类只负责一项职责
优点:
(1)可以降低类的复杂度,一个类只负责一项职责,其逻辑一定比负责多项职责简单
(2)提高类的可读性,提交系统的可维护性
(3)变更引起的风险降低,变更是必然的,如果单一职能原则遵循的好,修改功能是,可以显著的降低对其他功能的影响。
体现:程序模块化
5 years ago
2. 里氏替换
5 years ago
子类可以实现父类的抽象功能,尽量不要改变父类的已经实现功能
含义:
(1)子类可以实现父类的抽象方法,但不能重写父类非抽象方法
(2)子类可以增加自己特有的方法
(3)当子类的方法重载父类的方法时,方法的前置条件要(方法参数)比父类方法的输入参数宽松
(4)当子类的方法实现父类的抽象方式时,方法的后置条件(方法的返回值)要比父类更严格
3. 依赖倒置
高层模块不应该依赖底层模块,二者都应该依赖其抽象;抽象不应该依赖细节(实现类);细节应该依赖抽象
措施:
(1)底层模块尽量要有抽象类或者接口,或者两者都有
(2)变量的声明类型尽量是接口或者抽象类
(3)使用继承遵循里氏替换原则
依赖倒置核心:面向接口编程或者面向抽象编程
5 years ago
4. 接口隔离
客户端不应该依赖它不需要的几口;一个类对另外一个类的依赖应该建立在最小接口上
解决方案:将臃肿的接口拆分成几个独立的接口.
注意细节:
(1)接口尽量小,但要有限度.对接口细化可以提高程序的灵活性。但是过度拆分会导致程序复杂度上升,接口增多
(2)为依赖接口的类定制服务,只暴露调用的类需要的方法,它不需要的方法则隐藏。只有专注地为一个模块提供定制化服务,才能建立最小依赖关系
(3)提高内聚,减少对外交互.使接口用最小的方法去完成最多的方法.
5 years ago
5. 迪米特(最少知道原则)
5 years ago
一个对象应该对其他对象保持最少的了解
问题由来:类与类之间的关系越来越密切,耦合度越大。当一个类发生改变,对另外一个类的影响也越大
解决方案:尽量降低类与类之间的耦合度(高内聚低耦合)
6. 开闭原则
5 years ago
一个软件实体如类 模块和函数都应该对扩张开放,对修改关闭.
问题由来:在软件的生命周期内,因为变化 升级和维护等原因,对原来代码进行修改,可能会为旧代码引入错误。也可能会使我们不得不重构,并且需要对原有的代码经过重新测试
解决方案:当软件需要变化时,尽量通过扩张软件的实体的行为来实现变化,而不是通过修改原有的代码
用抽象构建框架,用实现扩展细节
总结:单一职责告诉我们类的功能尽量单一;里氏替换告诉我们不要破坏继承体系;依赖倒置告诉我们要面向接口编程;接口隔离告诉我们设计接口的时候要精简单一;
迪米特告诉告诉我们要降低耦合;开闭原则是总纲,告诉我们要对修改关闭,对扩张开放
```
设计模式模型
5 years ago
1. 创建型:单例模式(singleton),工厂模式(Factory), 抽象工厂模型(abstractFactory),原型模式(prototype), 建造者模式(builder)
2. 结构型: 代理模式(proxy), 装饰者模式(decorator) ,适配器模式(adapter), 外观模式(facade) , 容器模式(composite) ,享元模式(flyweight),桥梁模式(bridge)
3. 行为型:策略模式(strategy),责任链模式(responsibility),命令模式(common),仲裁者模式(mediator),模板方法模式(template),迭代器模式(iterator),访问者模式(visitor),观察者模式(observer),解析器模式(interpreter),备忘录模式(memento),状态模式(state)
5 years ago