- 设计模式是一种可复用的面向对象编程技术
- 设计模式的原理:面向接口编程
- 设计模式的目标:降低耦合,增强灵活性
- 要让你的程序尽可能的重用
- 将变化和不变的东西分离,抽象出不变的东西,那就做到了重用
- 随着软件需求的增加和变化,不断地将公共不变的东西抽象出来,那就是重构,重构手段就是使用各种设计模式
- 框架就是设计模式的重要体现,比如Spring全家桶等
创建模式
Factory 工厂模式
使用工厂模式应该像使用new一样频繁
参考1
Prototype 原型模式
通过复制对象的方法来获得与该对象一模一样的对象实例
Builder 模式
解耦对象装配方式和部件生成方式(变与不变)
参考1
参考2
参考3
Singleton 单例模式
全局唯一的对象,常见模式。比如DataSource对象,一般在应用中单例表示
结构模式
Facade 外观模式
Provide a unified interface to a set of interfaces in a subsystem. Facade
defines a higher-level interface that makes the subsystem easier to use
外观模式的一般描述是:外观模式定义了一个高层的功能,为子系统中的多个模块协同的完成某种功能需求提供简单的对外功能调用方式,使得这一子系统更加容易被外部使用
参考1
参考2
代理模式
Provide a surrogate or placeholder for another object to control access to it.
代理模式给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用。比如在代理对象的方法前后插入其他行为。
参考1
Adapter 适配器模式
在计算机编程中,适配器模式(有时候也称包装样式或者包装)将一个类的接口适配成用户所期待的。一个适配允许通常因为接口不兼容而不能在一起工作的类工作在一起,做法是将类自己的接口包裹在一个已存在的类中。本质还是组合和继承。
Convert the interface of a class into another interface clients expect.
Adapter lets classes work together that couldn't otherwise because of
incompatible interfaces
- 类适配器(继承)
A class adapter uses multiple inheritance to adapt one interface to another:
- 对象适配器
An object adapter relies on object composition:
Composite 合成模式
Compose objects into tree structures to represent part-whole hierarchies.
Composite lets clients treat individual objects and compositions of objects
uniformly.
组合多个对象形成树形结构以表示“整体-部分”的结构层次。组合模式对单个对象(即叶子对象)和组合对象(即容器对象)的使用具有一致性。
组合模式又可以称为“整体-部分”(Part-Whole)模式,属于对象的结构模式,它将对象组织到树结构中,可以用来描述整体与部分的关系。
组合模式描述了如何将容器对象和叶子对象进行递归组合,使得用户在使用时无须对它们进行区分,可以一致地对待容器对象和叶子对象,这就是组合模式的模式动机。
Decorator 装饰器模式
Attach additional responsibilities to an object dynamically. Decorators
provide a flexible alternative to subclassing for extending functionality.
***Bridge ***
image.pngDecouple an abstraction from its implementation so that the two can vary independently.
解耦抽象类和行为,将跟抽象类本身无关的行为分解出去,通过另外一个代表行为的接口来进行桥接。好处在于使得抽象类的子类不需要实现跟具体实现相关的行为,委托给其他接口实现相关行为。进一步将变与不变的东西分离(分离出行为),减少耦合。
参考1
装饰器模式和代理模式的区别
https://www.jianshu.com/p/c06a686dae39
Flyweight 模式
Use sharing to support large numbers of fine-grained objects efficiently.
主要功能是共享对象
行为模式
Template Method 模式方法模式
该模式就是简单的继承
Define the skeleton of an algorithm in an operation, deferring some steps to
subclasses. Template Method lets subclasses redefine certain steps of an
algorithm without changing the algorithm's structure.
Observer 观察者模式
Define a one-to-many dependency between objects so that when one object
changes state, all its dependents are notified and updated automatically
通常也被称作:
Dependents, Publish-Subscribe
Chain of Responsibility 责任链模式
Avoid coupling the sender of a request to its receiver by giving more than one
object a chance to handle the request. Chain the receiving objects and pass
the request along the chain until an object handles it.
Command 命令模式
image.png image.pngEncapsulate a request as an object, thereby letting you parameterize clients with different requests, queue or log requests, and support undoable operations.
基于变与不变进行分析:Invoker是不变的,Receiver和Command是变化的,通过将变化的Command抽象为接口,ConcreteCommand对Receiver方法进行代理,将ConcreteCommand传入Receiver,达到Invoker与具体命令解耦的目的。解耦的结果是,新增Command仅需新增ConcreteCommand配上合适的Receiver即可,Invoker调用永远不变,Invoker适合模板方法使用(Invoker面向Command接口编程),符合开闭原则。
State 状态模式
image.pngAllow an object to alter its behavior when its internal state changes. The
object will appear to change its class.
Strategy 策略模式
算法族的集合,本质是继承和多态。
image.pngDefine a family of algorithms, encapsulate each one, and make them interchangeable. Strategy lets the algorithm vary independently from clients that use it.
Mediator 中介者模式
image.pngDefine an object that encapsulates how a set of objects interact. Mediator
promotes loose coupling by keeping objects from referring to each other
explicitly, and it lets you vary their interaction independently.
Visitor 访问者模式
http://www.runoob.com/design-pattern/visitor-pattern.html
未完待续
网友评论