设计模式
创建者模式
设计模式 | 标准定义 | 通俗解读 | UML |
---|---|---|---|
工厂方法Factory Method |
定义一个用于创建对象的接口,让其子类决定将哪一个类实例化 | 您需要一辆汽车,可以直接从工厂里面提货,而不用去管这辆汽车是怎么做出来的,以及这个汽车里面的具体实现。而至于需要哪个牌子的汽车,就到哪个牌子的工厂。 | |
抽象工厂Abstract Factory |
提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。 | 可以生产手机和路由器(抽象产品类) 的厂商(抽象工厂类) 有华为和小米工厂(具体工厂类) 中分别生产华为手机,华为路由器和小米手机,路由器(产品类) |
|
建造者Builder |
将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 | 疯狂星期四,汉堡、可乐、薯条、炸鸡翅等是不变的,而其组合是经常变化的,生成出所谓的“套餐”(指挥者) |
|
单例singleton |
保证一个类仅有一个实例,并提供一个访问它的全局访问点。 | 中国实现一夫一妻制 ;一个班级只能有一个 班主任。 |
|
原型Prototype |
用原型实例指定创建对象的种类,并且通过拷贝这个原型来创建新的对象。 | 细胞分裂 ;打印机打印 一打卷子 |
结构型模式
设计模式 | 标准定义 | 通俗解读 | UML |
---|---|---|---|
适配器Adapter |
将一个类的接口转换成客户希望的另外一个接口。使得原本由于接口不兼容而不能一起工作的那些类可以一起工作 | 美国电器 110V,中国 220V,就要有一个变压器将 110V 转化为 220V | |
装饰器Decorator |
动态地给一个对象添加一些额外的职责。就扩展功能而言,比生成子类方式更为灵活。 | 孙悟空有 72 变,当他变成”庙宇”后,他的根本还是一只猴子,但是他又有了庙宇的功能; | |
桥接Bridge |
将抽象部分与它的实现部分分离,使它们都可以独立地变化。 | 墙上的开关,可以看到的开关是抽象的,不用管里面具体怎么实现的 | |
组合Composite |
将对象组合成树形结构以表示“部分-整体”的层次结构。使得客户对单个对象和复合对象的使用具有一致性。 | dom 树;文件系统。文件系统是一个典型的树状层级结构 | |
外观Facade |
为子系统中的一组接口提供一个一致的界面, 定义一个高层接口,这个接口使得这一子系统更加容易使用。 | 去医院看病,可能要去挂号、门诊、划价、取药,让患者或患者家属觉得很复杂,如果有提供接待人员,只让接待人员来处理,就很方便。 | |
享元Flyweight |
运用共享技术有效地支持大量细粒度的对象。 | unity 的 prefabs;数据库的数据池 | |
代理Proxy |
为其他对象提供一个代理以控制对这个对象的访问。 | 买火车票不一定在火车站买,也可以去代售点;Windows 里面的快捷方式; |
行为型模式
以下是根据文中内容整理的关于设计模式的相关信息表格:
名称 | 标准定义 | 定义解析 | 应用实例 |
---|---|---|---|
策略模式 | 在策略模式中,一个类的行为或其算法可以在运行时更改。 | 在策略模式中,我们创建表示各种策略的对象和一个行为随着策略对象改变而改变的context对象。策略对象改变context对象的执行算法。 | 1、诸葛亮的锦囊妙计,每一个锦囊就是一个策略;2、旅行的出游方式,选择骑自行车、坐汽车,每一种旅行方式都是一个策略。 |
模板模式 | 在模板模式中,一个抽象类公开定义了执行它的方法的方式/模板。 | 定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。 | 1、在造房子的时候,地基、走线、水管都一样,只有在建筑的后期才有加壁橱加栅栏等差异;2、西游记里面菩萨定好的81难,这就是一个顶层的逻辑骨架;3、spring中对Hibernate的支持,将一些已经定好的方法封装起来,比如开启事务、获取Session、关闭Session等,程序员不重复写那些已经规范好的代码,直接丢一个实体就可以保存。 |
观察者模式 | 当对象间存在一对多关系时,则使用观察者模式。比如,当一个对象被修改时,则会自动通知它的依赖对象。 | 定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。 | 1、拍卖的时候,拍卖师观察最高标价,然后通知给其他竞价者竞价;2、西游记里面悟空请求菩萨降服红孩儿,菩萨洒了一地水招来一个老乌龟,这个乌龟就是观察者,他观察菩萨洒水这个动作。 |
迭代器模式 | 迭代器模式是Java和.Net编程环境中非常常用的设计模式。这种模式用于顺序访问集合对象的元素,不需要知道集合对象的底层表示。迭代器模式属于行为型模式。提供一种方法顺序访问一个聚合对象中各个元素,而又无须暴露该对象的内部表示。 | JAVA中的iterator。 | |
责任链模式 | 顾名思义,责任链模式为请求创建了一个接收者对象的链。这种模式给予请求的类型,对请求的发送者和接收者进行解耦。在这种模式中,通常每个接收者都包含对另一个接收者的引用。如果一个对象不能处理该请求,那么它会把相同的请求传给下一个接收者,依此类推。避免请求发送者与接收者耦合在一起,让多个对象都有可能接收请求,将这些对象连接成一条链,并且沿着这条链传递请求,直到有对象处理它为止。 | 红楼梦中的”击鼓传花”。 | |
命令模式 | 命令模式是一种数据驱动的设计模式。请求以命令的形式包裹在对象中,并传给调用对象。调用对象寻找可以处理该命令的合适的对象,并把该命令传给相应的对象,该对象执行命令。将一个请求封装成一个对象,从而使您可以用不同的请求对客户进行参数化。 | 电视机是请求的接收者,遥控器是请求的发送者,遥控器上有一些按钮,不同的按钮对应电视机的不同操作。抽象命令角色由一个命令接口来扮演,有三个具体的命令类实现了抽象命令接口,这三个具体命令类分别代表三种操作:打开电视机、关闭电视机和切换频道。 | |
备忘录模式 | 备忘录模式保存一个对象的某个状态,以便在适当的时候恢复对象。在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。 | 1、后悔药;2、打游戏时的存档;3、Windows里的ctri+z;4、IE中的后退;5、数据库的事务管理。 | |
状态模式 | 在状态模式中,类的行为是基于它的状态改变的。在状态模式中,我们创建表示各种状态的对象和一个行为随着状态对象改变而改变的context对象。允许对象在内部状态发生改变时改变它的行为,对象看起来好像修改了它的类。 | 打篮球的时候运动员可以有正常状态、不正常状态和超常状态;曾侯乙编钟中,“钟是抽象接口”,“钟A”等是具体状态,“曾侯乙编钟”是具体环境(Context)。 | |
访问者模式 | 在访问者模式中,我们使用了一个访问者类,它改变了元素类的执行算法。通过这种方式,元素的执行算法可以随着访问者改变而 |
参考文献
图解设计模式
图解 23 种设计模式
设计模式|菜鸟教程
c#设计模式总结
快速记忆 23 种设计模式
五分钟学设计模式
时序图 画图插件(需科学)
白话设计模式
《大话设计模式》解读
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 零の領域!