设计模式介绍
1.迭代模式
2.单例模式
3.多例模式
4.桥接模式
将抽象部分与它的实现部分分离,使它们都可以独立变化。
即业务抽象角色引用业务实现角色,或者说业务抽象角色的部分实现是由业务实现角色完成的。
桥梁模式的优点就是类间解耦。
说到桥接模式,那就多扯几句,大家对类的继承有什么看法吗?继承的优点有很多,但也有缺点即强关联关系,父类有个方法,你子类也必须有这个方法,是不可选择的,那这会带来扩展性的问题。这个桥接模式就是这一问题的解决方法,桥接模式描述了类间弱关联关系。
- Receiver角色:这个就是干活的角色,命令传递到这里是应该被执行的;
- Command角色:就是命令,需要我执行的所有命令都这里声明;
- Invoker角色:调用者,接收到命令,并执行命令;
6.策略模式
7.代理模式
通用类图
8.简单工厂模式和抽象工厂模式
9.门面模式(即外观模式)
为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。
10.适配器模式
将一个接口转换成客户希望的另一个接口,使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
11.模板方法模式
通用类图:
AbstractClass 主要是定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。 TemplateMethod 使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。这有点像 C 语言中的一个 “ 钩子( hook ) ” ;同时将公用的代码移植到 TemplateMethod 中,实现的代码的公用。
12.建造者模式
将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
建造者模式,中间有几个角色需要说明一下:
- Client这个到具体的应用中就是其他的模块或者页面;
- CarModel以及两个实现类BenzModel(奔驰)和BMWModel(宝马)叫做产品类(Product Class),这个产品类实现了模板方法模式,也就是有模板方法和基本方法,这个参考上一点的模板方法模式;
- CarBuilder以及两个实现类BenzBuilder和BMWBuilder叫做建造者(Builder Class),在上面的那个例子中就是我和我的团队,负责建造Benz和BMW车模,按照指定的顺序;
- Director类叫做导演类(Director Class),负责安排已有模块的顺序,然后告诉Builder开始建造;
建造者模式和工厂模式非常相似,其主要区别:建造者模式最主要功能是基本方法的调用顺序安排,也就是这些基本方法已经实现了;而工厂方法则重点是创建,你要什么对象我创造一个对象出来,组装顺序则不是他关心的。
13.中介者模式
通用类图:
从类图中看,中介者模式有以下几部分组成:
- 抽象中介者(Mediator)角色:抽象中介者角色定义统一的接口用于各同事角色之间的通信。
- 具体中介者(Concrete Mediator)角色:具体中介者角色通过协调各同事角色实现协作行为,因此它必须依赖于各个同事角色。
- 同 事(Colleague)角色:每一个同事角色都知道中介者角色,而且与其他的同事角色通信的时候,一定要通过中介者角色协作。每个同事类的行为分为两 种:一种是同事本身的行为,比如改变对象本身的状态,处理自己的行为等等,这种方法叫做自发行为(Self-Method),与其他的同事类或中介者没有 任何的依赖;第二种是是必须依赖中介者才能完成的行为,叫做依赖方法(Dep-Method)。
示例图 :![]()
14.原型模 式
- 定义clone方法,进行clone操作
15.访问者模式
我们来看这几个角色的职责:
- 抽象访问者(Visitor):抽象类或者接口,声明访问者可以访问哪些元素,具体到程序中就是visit方法的参数定义哪些对象是可以被访问的;
- 具体访问者(ConcreteVisitor):访问者访问到一个类后该怎么干,要做什么事情;
- 抽象元素(Element):接口或者抽象类,声明接受那一类型的访问者访问,程序上是通过accept方法中的参数来定义;
- 具体元素(ConcreteElement):实现accept方法,通常是visitor.visit(this),基本上都形成了一个套路了;
- 结构对象(ObjectStruture):容纳多个不同类、不同接口的容器,比如List、Set、Map等,在项目中,一般很少抽象出来这个角色
16.职责链模 式
通用类图:
在通用类图中Handler是一个接口或者是抽象类,每个实现类都有两个方法HandlerRequest是处理请求,setNext是设置当前环节怎么把不属于自己处理的请求扔给谁,对于这个类图又另外融合进来了模版方法模式。
17.观察者模式
通用类图:
18.享元模 式
运用共享技术有效的支持大量细粒度的对象
19.装饰模 式
动态地给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类灵活。
通用类图:
在装饰模式中,必然有一个被提取出来最核心、最原始、最基本的接口或抽象类,就是Component。
- ConcreteComponent这个事最核心、最原始、最基本的接口或抽象类的实现,你要装饰的就是这个东东。
- Decorator一般是一个抽象类,在它的属性里必然有一个private变量指向Component。
- ConcreteDecoratorA和ConcreteDecoratorB是两个具体的装饰类,你要把你最核心的、最原始的、最基本的东西装饰城啥东西,就是在这里实现。

浙公网安备 33010602011771号