设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。
设计模式的三种模型:
创建型模式:单例模式、抽象工厂模式、建造者模式、工厂模式、原型模式。
结构型模式:适配器模式、桥接模式、装饰模式、组合模式、外观模式、享元模式、代理模式。
行为型模式:模版方法模式、命令模式、迭代器模式、观察者模式、中介者模式、备忘录模式、解释器模式、状态模式、策略模式、职责链模式、访问者模式。
面向对象的特点
- 封装、继承、多态。UML类图
- 在UML类图中,常见的有以下几种关系: 泛化(Generalization), 实现(Realization),关联(Association),聚合(Aggregation),组合(Composition),依赖(Dependency)
- 在UML类图中矩形框表示一个类,类分三层,第一层是;类的名称,如果是抽象类,则用斜体显示,第二层表示特性,是字段和属性,第三层表示操作,通常是方法和行为。
- 注意前面符号,“+”表示public,“-”表示private,“#”表示protected。
几种常用的设计模式介绍:
一、工厂方法模式(Factory Method)
工厂模式专门负责将大量有共同接口的类实例化,工厂模式可以动态决定将哪一个类实例化,不必事先知道要实例化那一个类。
工厂模式的几种形态:
-
-
- 简单工厂模式:又称静态工厂方法模式。
- 工厂方法模式:又称多态性工厂模式。
- 抽象工厂模式:又称 工具箱模式。
-
二、代理模式
定义:对其他对象提供一种代理以控制对这个对象的访问。
作用:使用代理模式创建代理对象,让代理对象控制目标对象的访问(目标对象可以是远程的对象、创建开销大的对象或需要安全控制的对象),并且可以在不改变目标对象的情况下添加一些额外的功能。
思想:提供额外的处理或者不同的操作而在实际对象与调用者之间插入一个代理对象。真实对象很干净,代理对象代理真实对象需要做的事情,并且加入了一些辅助的事情。
应用:就是采用一个代理类调用原有的方法,且对产生的结果进行控制。
三、Templete模式
对于某个逻辑实现(算法实现)在不同的对象中有不同的细节实现,但是框架是相同的,Templete模式是采用继承的方式来实现这一点,将框架放到基类中,定义好细节的接口,子类中实现具体的细节。类似于HOOK。说白了:父类TempleteMethod方法调用Primitive1和Primitive2,但是在子类中实现Primitive1和Primitive2。
Template模式获得一种反向控制结构效果,这也是面向对象系统的分析和设计中一个原则DIP(依赖倒置:Dependency Inversion Principles)。其含义就是父类调用子类的操作(高层模块调用低层模块的操作),低层模块实现高层模块声明的接口。这样控制权在父类(高层模块),低层模块反而要依赖高层模块。