设计模式
个人设计模式学习记录
ClarenceZero
这个作者很懒,什么都没留下…
展开
-
设计模式之组合模式
组合模式定义将一组对象组织(Compose)成树形结构,以表示一种“部分 - 整体”的层次结构。组合让客户端(在很多设计模式书籍中,“客户端”代指代码的使用者。)可以统一单个对象和组合对象的处理逻辑。组合模式允许你将对象组合成树形结构来表现整体/部分 层次结构。组合能让客户以一致的方式处理个别对象以及对象组合。组合模式是一种结构型设计模式, 你可以使用它将对象组合成树状结构, 并且能像使用独立对象一样使用它们。类图总结组合模式的设计思路,与其说是一种设计模式,倒不如说是对业务场原创 2020-06-29 10:30:36 · 5140 阅读 · 0 评论 -
设计模式之享元模式
享元模式定义所谓享元,顾名思义就是被共享的单元。享元模式的意图是复用对象,节省内存,前提是享元对象是不可变对象。在内存中只保留一份实例,供多处代码引用。实现1. 定义享元类/** * 享元类 * 这里定义的字段都是可以复用的 */public class ChessPieceUnit { private int id; private String text; private Color color; public ChessPieceUnit(int原创 2020-06-29 10:15:24 · 139 阅读 · 0 评论 -
设计模式之解释器模式
解释器模式解释器模式更加小众,只在一些特定的领域会被用到,比如编译器、规则引擎、正则表达式。它的代码实现的核心思想,就是将语法解析的工作拆分到各个小类中,以此来避免大而全的解析类。一般的做法是,将语法规则拆分成一些小的独立的单元,然后对每个单元进行解析,最终合并为对整个语法规则的解析。定义解释器模式为某个语言定义它的语法(或者叫文法)表示,并定义一个解释器用来处理这个语法。实现基于解析器模式的自定义告警规则功能。1. 定义表达式接口/** * 定义表达式解析模板 */public i原创 2020-06-29 09:40:31 · 189 阅读 · 0 评论 -
备忘录模式
备忘录模式定义在不违背封装原则的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,以便之后恢复对象为先前的状态。这个模式的定义主要表达了两部分内容。一部分是,存储副本以便后期恢复。这一部分很好理解。另一部分是,要在不违背封装原则的前提下,进行对象的备份和恢复。模式建议将对象状态的副本存储在一个名为备忘录 (Memento) 的特殊对象中。 除了创建备忘录的对象外, 任何对象都不能访问备忘录的内容。 其他对象必须使用受限接口与备忘录进行交互, 它们可以获取快照的元数据 (创建时间和操作名原创 2020-06-29 08:42:41 · 4481 阅读 · 0 评论 -
设计模式之访问者模式
访问者模式由于它难理解、难实现。应用它会导致代码的可读性、可维护性变差,所以在开发中很少被用到。定义允许一个或者多个操作应用到一组对象上,解耦操作和对象本身。类图实现1. 定义Visitorpublic interface Visitor { void visit(PdfFile pdfFile); void visit(WordFile wordFile);}2. 定义Visitor实现类public class Compressor implements原创 2020-06-28 20:05:24 · 139 阅读 · 0 评论 -
设计模式之中介者模式
中介者模式定义中介模式定义了一个单独的(中介)对象,来封装一组对象之间的交互。将这组对象之间的交互委派给与中介对象交互,来避免对象之间的直接交互。如航空管制。为了让飞机在飞行的时候不互相干扰,需要时刻与其他飞机进行通信。这时,我们引入塔台这样一个中介,让每架飞机只根塔台来通信,发送自己位置给塔台,由塔台来负责每回飞机的航线调度,这样就大大简化了通信网络。类图总结中介模式也是为了解耦对象之间的交互,所有的参与者都只与中介进行交互。而观察者模式中的消息队列,就有点类似中介模式中的“中介”,原创 2020-06-28 18:42:42 · 215 阅读 · 0 评论 -
设计模式之桥接模式
桥接模式定义桥接模式是一种结构型设计模式, 可将一个大类或一系列紧密相关的类拆分为抽象和实现两个独立的层次结构, 从而能在开发时分别使用。将抽象和实现解耦,让它们可以独立变化。一个类存在两个(或多个)独立变化的维度,我们通过组合的方式,让这两个(或多个)维度可以独立进行扩展。JDBC是桥接模式典型应用。类图实现抽象对象控制程序的外观, 并将真实工作委派给连入的实现对象。 不同的实现只要遵循相同的接口就可以互换, 使同一 GUI 可在 Windows 和 Linux 下运行。原创 2020-06-28 12:49:42 · 160 阅读 · 1 评论 -
设计模式之原型模式
原型模式定义如果对象的创建成本比较大,而同一个类的不同对象之间差别不大(大部分字段都相同),在这种情况下,我们可以利用对已有对象(原型)进行复制(或者叫拷贝)的方式来创建新对象,以达到节省创建时间的目的。这种基于原型来创建对象的方式就叫作原型设计模式(Prototype Design Pattern),简称原型模式。类图实现1. 浅拷贝@Datapublic class SearchWords implements Cloneable{ String keyWorld;原创 2020-06-28 12:23:57 · 134 阅读 · 0 评论 -
设计模式之职责链模式
职责链模式定义将请求的发送和接收解耦,让多个接收对象都有机会处理这个请求。将这些接收对象串成一条链,并沿着这条链传递这个请求,直到链上的某个接收对象能够处理它为止。多个处理器依次处理同一个请求。一个请求先经过A处理器处理,然后再把请求传递给B处理器,B处理完后传递给C,以此类推,形成一个链条。链条上的每个处理器各自承担各自的处理职责。职责链模式实现有多种。类图实现实现一个敏感词过滤。1. 定义过滤算法接口public interface SensitiveWordFilter {原创 2020-06-23 21:00:24 · 190 阅读 · 0 评论 -
设计模式之建造者模式
建造者模式定义建造者模式(Builder Pattern)使用多个简单的对象一步一步构建成一个复杂的对象。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。一个 Builder 类会一步一步构造最终的对象。该 Builder 类是独立于其他对象的。实现public class ResourcePoolConfig { private String name; private int maxTotal; private int maxIdle; p原创 2020-06-23 19:29:14 · 122 阅读 · 0 评论 -
设计模式之代理模式
代理模式定义代理模式为另一个对象提供一个替身或占位符以控制对这个对象访问。代理模式(英语:Proxy Pattern)是程序设计中的一种设计模式。所谓的代理者是指一个类别可以作为其它东西的接口。代理者可以作任何东西的接口:网络连接、存储器中的大对象、文件或其它昂贵或无法复制的资源。著名的代理模式例子为引用计数(英语:reference counting)指针对象。当一个复杂对象的多份副本须存在时,代理模式可以结合享元模式以减少存储器用量。典型作法是创建一个复杂对象及多个代理者,每个代理者会原创 2020-06-23 09:16:44 · 147 阅读 · 0 评论 -
设计模式之状态模式
状态模式定义有限状态机状态存储关于过去的信息,就是说:它反映从系统开始到现在时刻的输入变化。转移指示状态变更,并且用必须满足确使转移发生的条件来描述它。动作是在给定时刻要进行的活动的描述。有多种类型的动作:进入动作(entry action):在进入状态时进行退出动作(exit action):在退出状态时进行输入动作:依赖于当前状态和输入条件进行转移动作:在进行特定转移时进行FSM(有限状态机)可以使用上面图1那样的状态图(或状态转移图)来表示。此外可以使用多种类型的状态转移表。下面原创 2020-06-21 16:21:58 · 315 阅读 · 0 评论 -
设计模式之命令模式
命令模式定义命令模式将请求封装成对象,以便使用不同的请求、队列或日志来参数化其他对象。命令模式也支持可撤销的操作。一个命令对象通过在特定接收者上绑定一组动作来封装一个请求。要达到这一点,命令对象将动作和接收者包进对象。这个对象只暴露出一个execute()方法,当此方法被调用的时候,接收者就会进行这些动作。从外面看,其他对象不知道空间哪个接收者进行了哪些动作,只知道如果调用了execute()方法,请求的目的就能达到。类图实现1. 定义Command接口/** * 命令定义 */pu原创 2020-06-20 19:03:47 · 153 阅读 · 0 评论 -
设计模式之迭代器模式
迭代器模式定义迭代器模式Iterator Design Pattern也叫游标模式Cursor Design Pattern。用来遍历集合对象(如数组、链表、树、图、跳表)。迭代器模式将集合对象的遍历操作从集合类中拆分出来,让两者的职责更加单一。迭代器模式提供一种方法顺序访问一个聚合对象中的各个元素,而不暴露其内部的表示。类图实现1. 定义迭代器接口public interface MyIterator<E> { /** * 判断是否有下一个元素原创 2020-06-19 09:32:28 · 154 阅读 · 0 评论 -
设计模式之模板方法
模板方法定义模板方法模式在一个方法中定义一个算法骨架,并将某些步骤推迟到子类中实现。模板方法模式可以让子类在不改变算法整体结构的情况下,重新定义算法中的某些步骤。(引用GoF 设计模式)类图实现1. 定义抽象类package template;/** * 抽象类: 作为基类,其子类必须实现抽象方法 */public abstract class CaffeineBeverage { /** * 整个流程处理 * 声明为final以免子类改变这个算法的原创 2020-06-18 08:51:43 · 205 阅读 · 0 评论 -
设计模式之门面模式(外观模式)
门面模式(外观模式)定义将一个或数个类的复杂的一切都隐藏在背后,只显露一个干净美好的门面(外观)。门面没有封装子系统的类,门面只提供简化的接口。所以客户觉得有必要,依然可以直接使用子系统的类。创建一个接口简化而统一的类,用来包装子系统中的一个或多个复杂的类。门面模式为子系统提供了一组统一的接口,定义一组高层接口让子系统更易用。类图总结解决易用性问题。外观模式可以用来封装系统的底层实现,隐藏系统的复杂性,提供一组更加简单易用、更高层的接口。如Linux是对内核的封装。Shell命令原创 2020-06-17 20:58:33 · 182 阅读 · 0 评论 -
设计模式之适配器模式
适配器模式定义在计算机编程中,适配器模式(有时候也称包装样式或者包装)将一个类的接口适配成用户所期待的。一个适配允许通常因为接口不兼容而不能在一起工作的类工作在一起,做法是将类自己的接口包裹在一个已存在的类中。适配器模式主要应用于,当接口里定义的方法无法满足客户的需求,或者说接口里定义的方法的名称或者方法界面与客户需求有冲突的情况。(引用百度百科)适配器模式(英语:adapter pattern)有时候也称包装样式或者包装(wrapper)。将一个类的接口转接成用户所期待的。一个适配使得因接原创 2020-06-16 12:22:00 · 216 阅读 · 0 评论 -
设计模式之单例模式
单例模式确保任何情况下都绝对只有一个补全。像这样的被称为单例模式。创建单例模式的五种方式1. 饿汉式public class Hungry { private static Instance instance = new Instance(); private Hungry() {} public static Instance getInstance() { return instance; }}线程安全但是有的人需要用到的时候才加载原创 2020-06-11 21:20:30 · 145 阅读 · 0 评论 -
设计模式之工厂模式(工厂方法模式、抽象工厂模式)
工厂模式所谓工厂,就是将零件组装成产品的地方。建一个对象常常需要复杂的过程,所以不适合包含在一个复合对象中。创建对象可能会导致大量的重复代码,可能会需要复合对象访问不到的信息,也可能提供不了足够级别的抽象,还可能并不是复合对象概念的一部分。在面向对象程序设计中,工厂通常是一个用来创建其他对象的对象。工厂是构造方法的抽象,用来实现不同的分配方案。几个不同的设计模式都应用了工厂的概念,并可以使用在很多语言中。例如,在《设计模式》一书中,像工厂方法模式、抽象工厂模式、生成器模式,甚至是单例模式都应用了工厂原创 2020-06-11 20:37:34 · 6292 阅读 · 0 评论 -
设计模式之装饰者模式
装饰者模式定义装饰者模式动态地将责任附加到对象上。若要扩展功能,装饰者提供了比继承更有弹性的替代方案。(引用 Head First 设计模式)一种动态地往一个类中添加新的行为的设计模式。就功能而言,修饰模式相比生成子类更为灵活,这样可以给某个对象而不是整个类添加一些功能。通过使用修饰模式,可以在运行时扩充一个类的功能。原理是:增加一个修饰类包裹原来的类,包裹的方式一般是通过在将原来的对象作为修饰类的构造函数的参数。装饰类实现新的功能,但是,在不需要用到新功能的地方,它可以直接调用原来的类中的原创 2020-06-08 15:15:56 · 186 阅读 · 0 评论 -
设计模式之观察者模式
观察者模式定义设计模式的一种。在此种模式中,一个目标对象管理所有相依于它的观察者对象,并且在它本身的状态改变时主动发出通知。这通常透过呼叫各观察者所提供的方法来实现。此种模式通常被用来实时事件处理系统。( 引用维基百科 )观察者模式(Observer)完美的将观察者和被观察的对象分离开。举个例子,用户界面可以作为一个观察者,业务数据是被观察者,用户界面观察业务数据的变化,发现数据变化后,就显示在界面上。面向对象设计的一个原则是:系统中的每个类将重点放在某一个功能上,而不是其他方面。一个对象只做原创 2020-06-05 09:59:13 · 175 阅读 · 0 评论 -
设计模式之策略模式
策略模式什么是策略一般是指:可以实现目标的方案集合。根据形势发展而制定的行动方针和斗争方法。有斗争艺术,能注意方式方法。“策略”就是为了实现某一个目标,首先预先根据可能出现的问题制定的若干对应的方案,并且,在实现目标的过程中,根据形势的发展和变化来制定出新的方案,或者根据形势的发展和变化来选择相应的方案,最终实现目标。(引用百度百科)什么是策略模式策略模式作为一种软件设计模式,指对象有某个行为,但是在不同的场景中,该行为有不同的实现算法。比如每个人都要“交个人所得税”,但是“在美原创 2020-06-04 21:45:17 · 360 阅读 · 0 评论