目录:
各种设计模式简介
各种设计模式之间关系
不同设计模式的对比
设计模式分类与简介
一、创建型:关注对象创建过程;将对象使用与创建分离,使用对象时无需关心对象创建细节,从而降低系统耦合度,让设计方案易于修改和扩展;
简单工厂: 定义一个工厂类,可以根据输入的不同返回不同类的实例。
工厂方法: 定义一个用于创建对象的接口,让子类决定实例化哪一个类,Factory Method使一个类的实例化延迟到了子类。
具体应用场景:1、日志记录器;2、数据库访问,当用户不知道最后系统采用哪一类数据库,以及数据库可能有变化时。
抽象工厂: 提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们的具体类。
具体应用场景: 1、QQ 换皮肤,一整套一起换。 2、生成不同操作系统的程序。
单例: 保证一个类只有一个实例,并提供一个访问它的全局访问点。
具体应用场景:
1、Windows 是多进程多线程的,在操作一个文件的时候,就不可避免地出现多个进程或线程同时操作一个文件的现象,所以所有文件的处理必须通过唯一的实例来进行。
2、一些设备管理器常常设计为单例模式,比如一个电脑有两台打印机,在输出的时候就要处理不能两台打印机打印同一个文件。
原型: 用原型实例指定创建对象的种类,并且通过拷贝这些原型来创建新的对象。
具体应用场景:JAVA 中的 Object clone() 方法。
建造者
具体应用场景:1、去肯德基,汉堡、可乐、薯条、炸鸡翅等是不变的,而其组合是经常变化的,生成出所谓的"套餐"。 2、JAVA 中的 StringBuilder。
二、结构型:关注如何将现有类或对象组织在一起形成更强大的结构;
适配器
具体应用场景: 1、美国电器 110V,中国 220V,就要有一个适配器将 110V 转化为 220V。 3、在 LINUX 上运行 WINDOWS 程序。 4、JAVA 中的 jdbc。
桥接
具体应用场景: 2、墙上的开关,可以看到的开关是抽象的,不用管里面具体怎么实现的。
组合
具体应用场景:在 JAVA AWT 和 SWING 中,对于 Button 和 Checkbox 是树叶,Container 是树枝。
装饰
具体应用场景:1、孙悟空有 72 变,当他变成"庙宇"后,他的根本还是一只猴子,但是他又有了庙宇的功能。
外观
具体应用场景:1、去医院看病,可能要去挂号、门诊、划价、取药,让患者或患者家属觉得很复杂,如果有提供接待人员,只让接待人员来处理,就很方便。
享元
具体应用场景:1、JAVA 中的 String,如果有则返回,如果没有则创建一个字符串保存在字符串缓存池里面。 2、数据库的数据池。
代理
具体应用场景: 1、Windows 里面的快捷方式。2、买火车票不一定在火车站买,也可以去代售点。
三、行为型: 关注系统中对象的交互,研究系统在运行时对象之间的相互通信与协作,进一步明确对象的职责。
职责链
具体应用场景:JS 中的事件冒泡。 3、JAVA WEB 中 Apache Tomcat 对 Encoding 的处理,Struts2 的拦截器,jsp servlet 的 Filter。
命令
具体应用场景:struts 1 中的 action 核心控制器 ActionServlet 只有一个,相当于 Invoker,而模型层的类会随着不同的应用有不同的模型类,相当于具体的 Command。
解释器
具体应用场景:编译器、运算表达式计算。
迭代
具体应用场景:JAVA 中的 iterator。
中介者
具体应用场景:机场调度系统;MVC 框架,其中C(控制器)就是 M(模型)和 V(视图)的中介者。
备忘录
具体应用场景:
观察者
具体应用场景:1、拍卖的时候,拍卖师观察最高标价,然后通知给其他竞价者竞价。
状态
具体应用场景: 1、打篮球的时候运动员可以有正常状态、不正常状态和超常状态。 2、曾侯乙编钟中,'钟是抽象接口','钟A'等是具体状态,'曾侯乙编钟'是具体环境(Context)。
策略
具体应用场景: 1、诸葛亮的锦囊妙计,每一个锦囊就是一个策略。 2、旅行的出游方式,选择骑自行车、坐汽车,每一种旅行方式都是一个策略。 3、JAVA AWT 中的 LayoutManager。
模板方法
具体应用场景:1、在造房子的时候,地基、走线、水管都一样,只有在建筑的后期才有加壁橱加栅栏等差异。
访问者
具体应用场景:您在朋友家做客,您是访问者,朋友接受您的访问,您通过朋友的描述,然后对朋友的描述做出一个判断,这就是访问者模式。
各种设计模式之间关系
不同设计模式的对比