主要是大脑中有个印象,过程中能想到就往上靠,想不到就想不到了。(摆手表情)
更新2019-05-28,看到对设计模式进行详细分析的文章 设计模式看了又忘,忘了又看?
常见的模式
工厂模式:减少new 操作。
单例模式:避免大量new操作,创建一个实例,必须给其他对象提供这一实例,必须自行创建这个实例。
注册模式:全局共享,交换对象。
策略模式:面向对象多形式。
适配器模式:将各种截然不同的函数接口封装成统一的API
五大创建型模式:
工厂模式(Factory method Pattern):减少new 操作。
- 简单工厂模式(静态工厂模式) 扩展性不好,单产品多层级,层级数量不多的情况下
- 工厂方法 一个产品的各个层级方面,层级多且支持扩展
抽象工厂 (Abstract Factory Pattern): 多个产品多个层级方面
单例模式(Singletion Pattern):避免大量new操作,创建一个实例,必须给其他对象提供这一实例,必须自行创建这个实例。
- 只有一个实例;
- 自行实例化(主动实例化)
- 向整个系统提供这个实例
- 饿汉式单例模式 加载方式: 类 加载到 内存 的过程中, 创建好了对象
- 懒汉式单例模式 加载方式: 类 第一次使用才创建对象:synchronized 同一时间点,只允许一个线程执行该方法
(多线程并发,节约内存)
建造者模式(Builder Pattern):
把本来强依赖的东西解绑(降低耦合),解决依赖问题,提高封装性。
原型模式(Prototype Pattern):
提高创建对象的效率。
六大原则
单一职责原则(Single Responsibility Principle):
方法,接口,类 都有各自的方式进行拆分为单一原则。
好处:
- 类复杂性降低,实现什么职责都有清晰明确的定义
- 复杂性降低,可读性提高
- 可读性提高,维护性提高
- 变更引起的风向降低,扩展性,维护性提高
里氏替换原则(Liskov Substitution Principle):
父子关系,继承,不重写方法。
优点:
- 代码共享,减少创建类的工作量,每个子类都拥有父类的方法、属性;
- 提高重用性;
- 子 高于 父;
- 可扩展性提高;
- 提高产品或项目的开放性
缺点:
- 父到子,继承是侵入性的;
- 降低代码灵活性;
- 增强耦合性;
- 父类严重影响子类
依赖倒置原则(Dependence Inversion Principle):
降低类的耦合性,提高灵活的处理。
最佳:
- 变量的表面类型尽量是 接口或抽象类;
- 任何类都不应该从具体类派生;
- 尽量不覆写基类方法;
- 结合里氏替换原则使用。
面向接口思维
接口隔离原则(Interface Segregation Principle):
把接口中不常一起使用的方法拆分到不同的接口。(不用每个方法都实现一次!)
迪米特法则(Law of Demeter Principle):最少知识原则(Last Knowledge ~)
高内聚,低耦合(是你的就别给别人,不是你的就别拿)
开闭原则(Open Closed Principle):
对扩展开放,对修改封闭。
(下面的模式没有仔细看)
十一大行为型模式
模板方法(Template Method Pattern)
中介者模式(Mediator Pattern)
减少不必要的依赖,降低类间的耦合(MVC,依赖关系剥离)
命令模式(Command Pattern)
进行类的解耦,可扩展性增加;
责任链模式(Chain of Reponsibility Pattern)
策略模式(Strategg Pattern)
配合 工厂模式
迭代器模式(Iterator Pattern)
最广泛的
观察者模式(Observer Pattern)
消息队列消费,Android 开发中的事件触发机制
状态模式(State Pattern)
降低代码复杂性,提高可维护性;
有很多 if-else 的语句,可替换!
备忘录模式(Memento Pattern)
回滚非常重要
解释模式(Interpreter Pattern)
访问者模式(Visitor Pattern)
七大结构型模式
适配器模式(Adapter Pattern):
桥接模式(Bridge Pattern):
组合模式(Composite Pattern):
装饰模式(Decorator Pattern):
外观模式(Facade Pattern):
享元模式(Flyweight Pattern):
代理模式(Proxy Pattern):