
设计模式
CodersCoder
有人见星辰,有人见尘埃。
展开
-
设计模式-- 备忘录模式
简介备忘录(Memento)模式的定义:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,以便以后当需要时能将该对象恢复到原先保存的状态。该模式又叫快照模式。备忘录模式是一种对象行为型模式,其主要优点如下。提供了一种可以恢复状态的机制。当用户需要时能够比较方便地将数据恢复到某个历史的状态。实现了内部状态的封装。除了创建它的发起人之外,其他对象都不能够访问这些状态信息。简化了发起人类。发起人不需要管理和保存其内部状态的各个备份,所有状态信息都保存在备忘录中,并由管理者进原创 2020-07-25 17:52:46 · 139 阅读 · 0 评论 -
设计模式--享元模式
简介享元(Flyweight)模式的定义:运用共享技术来有効地支持大量细粒度对象的复用。它通过共享已经存在的又橡来大幅度减少需要创建的对象数量、避免大量相似类的开销,从而提高系统资源的利用率。享元模式的结构与实现享元模式中存在以下两种状态:内部状态,即不会随着环境的改变而改变的可共享部分;外部状态,指随环境改变而改变的不可以共享的部分。享元模式的实现要领就是区分应用中的这两种状态,并将外部状态外部化。下面来分析其基本结构和实现方法。享元模式结构图如下:角色享元模式的主要角色有如下。抽原创 2020-07-24 18:06:20 · 126 阅读 · 0 评论 -
设计模式--访问者模式
简介访问者模式,是行为型设计模式之一。访问者模式是一种将数据操作与数据结构分离的设计模式,它可以算是 23种设计模式中最复杂的一个,但它的使用频率并不是很高。访问者模式的基本想法是,软件系统中拥有一个由许多对象构成的、比较稳定的对象结构,这些对象的类都拥有一个 accept 方法用来接受访问者对象的访问。访问者是一个接口,它拥有一个 visit 方法,这个方法对访问到的对象结构中不同类型的元素做出不同的处理。在对象结构的一次访问过程中,我们遍历整个对象结构,对每一个元素都实施 accept 方法,在每原创 2020-07-23 17:44:01 · 113 阅读 · 0 评论 -
设计模式--策略模式
简介定义一组算法,将每个算法都封装起来,并且使他们相互转换。意图: 定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换。解决问题: 在有多种算法相似的情况下,使用 if…else 所带来的复杂和难以维护(简而言之消除if分支过多问题)指导思想:开闭原则、迪米特法则、依赖倒置原则策略模式结构图如下:角色通过上述结构图可以看出策略模式包含的角色:环境类(Context):用来操作策略的上下文环境,起承上启下作用,屏蔽高层模块对策略,算法的直接访问。是策略模式的重点,它借用了代理原创 2020-07-22 22:00:24 · 108 阅读 · 0 评论 -
设计模式--模板方法模式
简介定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。 模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。通俗的说的就是有很多相同的步骤的,在某一些地方可能有一些差别适合于这种模式。模板方法的结构图也比较简单:角色模板模式中只有两个角色抽象类(AbstractClass):实现了模板方法,定义了算法的骨架。具体类(ConcreteClass):实现抽象类中的抽象方法,已完成完整的算法。简单实现举例:为了使用新的软件,我们需要下载,安装,配置和运行。使用模板方法原创 2020-07-21 22:45:09 · 108 阅读 · 0 评论 -
设计模式--状态模式
简介状态模式主要解决的是当控制一个对象状态的条件表达式过于复杂时的情况。把状态的判断逻辑转移到表示不同状态的一系列类中,可以把复杂的判断逻辑简化。状态模式的意图是让一个对象在其内部状态改变的时候,其行为也随之改变。结构图如下:适用性1.一个对象的行为取决于它的状态,并且它必须在运行时刻根据状态改变它的行为。2.一个操作中含有庞大的多分支的条件语句,且这些分支依赖于该对象的状态,这个状态通常用一个或多个枚举常量表示,通常,有多个操作包含这一相同的条件结构。State模式将每一个条件分支放入一个原创 2020-07-20 21:45:22 · 161 阅读 · 0 评论 -
设计模式--解释器模式
简介解释器模式基本介绍1)在编译原理中,一个算术表达式通过词法分析器形成词法单元,而后这些词法单元再通过词法分析器构建语法分析树,最终形成一颗抽象的语法分析树。这里的词法分析器和语法分析器都可以看做是解释器。2)解释器模式(Interpreter Pattern):是一种行为模式,指给定一个语言表达式,定义它的文法的一种表示,并定义一个解释器,使用该解释器来解释语言中的句子(表达式)角色抽象表达式角色(Expression):声明一个所有的具体表达式角色都需要实现的抽象接口。这个接口主要是原创 2020-07-19 10:14:49 · 122 阅读 · 0 评论 -
设计模式--中介者模式
简介中介者模式:定义一个对象来封装一系列对象的交互,中介者模式使各个对象之间不需要相互引用,从而使得其松耦合,而且用户可以独立地改变他们之间的交互。简单讲解:1)中介者模式(Mediator Pattern),用一个中介对象来封装一系列的对象交互。中介者使各个对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。2)中介者模式属于行为型模式,使代码易于维护。3)比如MVC模式,C(Controller控制器)是M(Model模型)和V(View视图)的中介者,在前后端交原创 2020-07-17 17:51:55 · 128 阅读 · 0 评论 -
设计模式--观察者模式
简介观察者模式(又被称为发布-订阅(Publish/Subscribe)模式,属于行为型模式的一种,它定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态变化时,会通知所有的观察者对象,使他们能够自动更新自己。观察者模式结构图如下:角色通过结构图可以发现观察者模式一共有四个角色:(1)Subject:抽象主题,他把所有观察者对象保存在一个集合里,可以有任意数量的观察者,抽象主题提供一个接口,可以增加和删除观察者对象。(2)ConcreteSubject:具原创 2020-07-16 17:31:02 · 121 阅读 · 1 评论 -
设计模式--迭代器模式
简介迭代器模式(Iterator Pattern):提供一种方法来访问聚合对象,而不用暴露这个对象的内部表示,其别名为游标(Cursor)。迭代器模式是一种对象行为型模式。在迭代器模式中,提供了一个外部的迭代器来对聚合对象进行访问和遍历,迭代器定义了一个访问该聚合元素的接口,并且可以跟踪当前遍历的元素,了解哪些元素已经遍历过而哪些没有。迭代器的引入,将使得对一个复杂聚合对象的操作变得简单。在迭代器模式中应用了工厂方法模式,抽象迭代器对应于抽象产品角色,具体迭代器对应于具体产品角色,抽象聚合类对应于原创 2020-07-15 21:58:55 · 150 阅读 · 0 评论 -
设计模式--命令模式
简介命令模式是一个高内聚的模式,其定义为:将一个请求封装成一个对象,从而让你使用不同的请求把客户端参数化,对请 求排队或者记录请求日志,可以提供命令的撤销和恢复功能。1.数据驱动设计模式,它是行为模式之一2.请求以命令的形式包裹在对象中,并传给调用对象。3.调用对象寻找可以处理该命令的合适的对象,并把该命令传给相应的对象,该对象执行命令。命令模式结构图:角色命令模式的几个角色:抽象命令接口Command:定义命令的接口,声明执行的方法。具体的命令对象ConcreteCommand:持原创 2020-07-14 21:00:34 · 98 阅读 · 0 评论 -
设计模式--责任链模式
简介责任链模式是一种对象的行为模式。在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链。请求在这个链上传递,直到链上的某一个对象决定处理此请求。发出这个请求的客户端并不知道链上的哪一个对象最终处理这个请求,这使得系统可以在不影响客户端的情况下动态地重新组织和分配责任。责任链模式结构图如下:角色责任链模式涉及到的角色: ● 抽象处理者(Handler)角色:定义出一个处理请求的接口。如果需要,接口可以定义 出一个方法以设定和返回对下家的引用。这个角色通常由一个Java抽原创 2020-07-13 21:25:59 · 254 阅读 · 0 评论 -
设计模式--过滤器模式(标准模式)
简介过滤器模式(Filter Pattern)或标准模式(Criteria Pattern)是一种设计模式,这种模式允许开发人员使用不同的标准来过滤一组对象,通过逻辑运算以解耦的方式把它们连接起来。这种类型的设计模式属于结构型模式,它结合多个标准来获得单一标准。优点:简单,解耦,使用方便。使用场景:需要进行筛选时。角色过滤器模式包含如下角色: (1) AbstractFilter(抽象过滤器角色):定义过滤的方法。 (2) ConcreteFilter(具体滤器角色):实现过滤的方法,原创 2020-07-12 15:37:51 · 580 阅读 · 0 评论 -
设计模式--代理模式
简介为其它对象提供一个代理对象,并由代理对象控制这个对象的访问。特点1)很直接的,实现同一个接口或者继承同一个抽象类。2)代理对象控制对被代理对象的访问。类图如下:代理模式中的角色:抽象主题角色(Subject):声明了目标对象和代理对象的共同接口,这样一来在任何可以使用目标对象的地方都可以使用代理对象。具体主题角色(RealSubject):也称为委托角色或者被代理角色。定义了代理对象所代表的目标对象。代理主题角色(Proxy):也叫委托类、代理类。代理对象内部含有目标对象的引用,原创 2020-07-11 21:54:59 · 148 阅读 · 0 评论 -
设计模式--组合模式
简介组合(Composite)模式是一种对象的行为模式。将对象组合成树形结构以表示“部分-整体”的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。组合模式的本质:统一叶子对象和组合对象。组合模式的目的:让客户端不再区分操作的是组合对象还是叶子对象,而是以一个统一的方式来操作。组合模式结构图角色及其职责:抽象组件(Component)角色:为组合对象和叶子对象声明公共的接口,让客户端可以通过这个接口来访问和管理整个对象树,并可以为这些定义的接口提供缺省的实现。组合对象(C原创 2020-07-09 18:28:48 · 128 阅读 · 0 评论 -
设计模式--外观模式(门面模式)
简介基本内容外观模式(Facade),也叫 “ 过程模式:外观模式为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。外观模式通过定义一个一致的接口,用以屏蔽内部子系统的细节,使得调用端只需跟这个接口发生调用,而无需关心这个子系统的内部细节。外观模式(Facade),他隐藏了系统的复杂性,并向客户端提供了一个可以访问系统的接口。这种类型的设计模式属于结构性模式。为子系统中的一组接口提供了一个统一的访问接口,这个接口使得子系统更容易被访问或者使用。原创 2020-07-08 18:07:29 · 222 阅读 · 0 评论 -
设计模式--桥接模式
简介桥接模式用意是“将抽象化(Abstraction)与实现化(Implementation)脱耦,使得二者可以独立地变化”。桥接模式是一种很实用的结构型设计模式,如果软件系统中某个类存在两个独立变化的维度,通过该模式可以将这两个维度分离出来,使两者可以独立扩展,让系统更加符合“单一职责原则”。 抽象化 从众多的事物中抽取出共同的、本质性的特征,而舍弃其非本质的特征,就是抽象化。例如苹果、香蕉、生梨、 桃子等,它们共同的特性就是水果。得出水果概念的过程,就是一个抽象化的过程。要抽象,就必须进行比原创 2020-07-07 17:15:44 · 1112 阅读 · 0 评论 -
设计模式--装饰器模式
简介装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构。这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装。装饰器模式中的角色有:抽象构件(Component)角色:给出一个抽象接口,已规范准备接收附加责任的对象。public interface Component { public void sampleOpreation();}具体构件(ConcreteComponent)角色:定义一个将要接收附加责任的类publi原创 2020-07-06 17:38:38 · 127 阅读 · 0 评论 -
设计模式--适配器模式
简介适配器模式(Adapter):将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类能一起工作。适配器模式分为类结构型模式和对象结构型模式两种,前者类之间的耦合度比后者高,且要求程序员了解现有组件库中的相关组件的内部结构,所以应用相对较少些。该模式的主要优点如下:客户端通过适配器可以透明地调用目标接口。复用了现存的类,程序员不需要修改原有代码而重用现有的适配者类。将目标类和适配者类解耦,解决了目标类和适配者类接口不一致的问题。其缺点是:对类适配器来说,更换原创 2020-07-05 16:59:25 · 2565 阅读 · 0 评论 -
设计模式--原型模式
简介原型模式(Prototype Pattern):使用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。原型模式是一种对象创建型模式。原理: 将一个原型对象传给那个要发动创建的对象,这个要发动创建的对象通过请求原型对象拷贝自己来实现创建过程。由于在软件系统中我们经常会遇到需要创建多个相同或者相似对象的情况,因此原型模式在真实开发中的使用频率还是非常高的。原型模式是一种“另类”的创建型模式,创建克隆对象的工厂就是原型类自身,工厂方法由克隆方法来实现。需要注意的是通过克隆方法所创建的对原创 2020-07-04 21:53:59 · 3195 阅读 · 0 评论 -
设计模式--建造者模式
简介生成器模式是一种创建型设计模式,它把对象的创建步骤抽象成生成器,并且可以通过指导类(director)对所有生成步骤的先后顺序进行控制。客户端使用指导类并传入相应的生成器,通过指导类的接口便可以得到相应的对象。主要四大角色:Product:表示被构造的复杂对象,其中包含需要构建的部件属性。**Builder:**创建一个产品对象的各个部件指定抽象接口。**ConcreteBuilder:**实现Builder的接口以构造和装配该产品的各个部件,定义并明确它所创建的表示。**Director原创 2020-07-03 18:50:06 · 128 阅读 · 0 评论 -
设计模式--单例模式
简介创建型模式,这种模式只涉及一个单独的类,它负责创建自己的对象,该类也确保只创建单个对象。特点类构造器私有持有自己类型的属性对外提供获取实例的静态方法分类常用分类有五种:1、懒汉式懒汉式,顾名思义就是实例在用到的时候才去创建,“比较懒”,用的时候才去检查有没有实例,如果有则返回,没有则新建。有线程安全和线程不安全两种写法,区别就是synchronized关键字。2、饿汉式饿汉式,从名字上也很好理解,就是“比较勤”,实例在初始化的时候就已经建好了,不管你有没有用到,都先建好了再说原创 2020-07-02 18:08:00 · 121 阅读 · 0 评论 -
设计模式--三种工厂模式
工厂模式把对类的创建初始化全都交给一个工厂来执行,而用户不需要去关心创建的过程是什么样的,只用告诉工厂我想要什么就行了。而这种方法的缺点也很明显,违背了设计模式的开闭原则,因为如果你要增加工厂可以初始化的类的时候,你必须对工厂进行改建。示例:定义一个接口代表形状,然后创建形状接口的实现类,有长方形正方形和圆形。public interface Shape { void draw();}public class Ractangle implements Shape{ @Over原创 2020-07-01 17:45:14 · 169 阅读 · 0 评论