设计模式
宇意
做一个更卓越的人
展开
-
解释器模式
解释器模式解释器模式(Interpreter Pattern):定义一个语言的文法,并且建立一个解释器来解释该语言中的句子,这里的“语言”是指使用规定格式和语法的代码。解释器模式是一种类行为型模式示例1Context;包含解释器之外的一些全局信息public class Context { private String before; private String ...原创 2019-12-06 09:06:49 · 135 阅读 · 0 评论 -
状态模式
状态模式状态模式(State Pattern):允许一个对象在其内部状态改变时改变它的行为,对象看起来似乎修改了它的类。其别名为状态对象(Objects for States),状态模式是一种对象行为型模式示例1以红绿灯为例说明。红绿灯有三种状态,红黄绿,每种状态灯的显示颜色是不同的,处理方式是不同的状态接口public interface IState { void h...原创 2019-12-05 20:04:58 · 144 阅读 · 0 评论 -
职责链模式
职责链模式职责链模式(Chain of Responsibility Pattern):避免请求发送者与接收者耦合在一起,让多个对象都有可能接收请求,将这些对象连接成一条链,并且沿着这条链传递请求,直到有对象处理它为止示例1以学校的采购审批为例说明:花费在5000以下时有教学主任处理,5000到10000时由院长处理,大于10000时由校长审批请求public class Pu...原创 2019-12-05 17:38:25 · 93 阅读 · 0 评论 -
备忘录模式
备忘录模式备忘录模式(Memento Pattern):在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样可以在以后将对象恢复到原先保存的状态。它是一种对象行为型模式,其别名为Token。Originator(原发器):它是一个普通类,可以创建一个备忘录,并存储它的当前内部状态,也可以使用备忘录来恢复其内部状态,一般将需要保存内部状态的类设计为原发器。Memen...原创 2019-12-05 16:30:44 · 87 阅读 · 0 评论 -
中介者模式
中介者模式中介者模式(Mediator Pattern):用一个中介对象(中介者)来封装一系列的对象交互,中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。中介者模式又称为调停者模式如果一个对象中对象之间的联系呈现为网状结构,对象之间存在大量多对多的关系,将导致关系极其复杂,这些对象被称为“同事对象”.此时我们可以引入一个中介者对象,使各个同事对象只跟中...原创 2019-11-30 21:41:31 · 86 阅读 · 0 评论 -
观察者模式
观察者模式观察者模式(Observer Pattern):定义对象之间的一种一对多依赖关系,使得每当一个对象状态发生改变时,其相关依赖对象皆得到通知并被自动更新。观察者模式的别名包括发布-订阅(Publish/Subscribe)模式、模型-视图(Model/View)模式、源-监听器(Source/Listener)模式或从属者(Dependents)模式典型应用:消息中间件,Spring...原创 2019-11-30 17:54:04 · 71 阅读 · 0 评论 -
迭代器模式
迭代器模式迭代器模式(Iterator Pattern):提供一种方法来访问聚合对象,而不用暴露这个对象的内部表示,其别名为游标(Cursor)。迭代器模式是一种对象行为型模式示例1以学院及部门为例。学院有计算机学院和信息工程学院,而两者的内部存储方式并不同,一个是用数组存储部门,一个是List存储部门,这是如果想要获取不同学院的部门,传统模式将存储和遍历放在一起,导致类职责过重,违反“...原创 2019-11-30 11:13:05 · 95 阅读 · 0 评论 -
访问者模式
访问者模式访问者模式(Visitor Pattern):提供一个作用于某对象结构中的各元素的操作表示,它使我们可以在不改变各元素的类的前提下定义作用于这些元素的新操作。访问者模式是一种对象行为型模式。示例1以公司的账单查看为例。老板查看账单主要是为了查看收入和支出的总数,注会查看账单主要是看交税了没。账单是被访问者 ,老板和注会是访问者。账单有收入账单和支出账单,两者存在于账本中。账...原创 2019-11-29 12:11:11 · 80 阅读 · 0 评论 -
命令模式
命令模式命令模式(Command Pattern):将一个请求封装为一个对象,从而让我们可用不同的请求对客户进行参数化;对请求排队或者记录请求日志,以及支持可撤销的操作。命令模式是一种对象行为型模式,其别名为动作(Action)模式或事务(Transaction)模式在软件开发中,我们经常需要向某些对象发送请求(调用其中的某个或某些方法),但是并不知道请求的接收者是谁,也不知道被请求的操作是...原创 2019-11-29 10:21:50 · 109 阅读 · 0 评论 -
策略模式
策略模式策略模式(Strategy Pattern):定义一系列算法类,将每一个算法封装起来,并让它们可以相互替换,策略模式让算法独立于使用它的客户而变化,也称为政策模式(Policy)。策略模式是一种对象行为型模式示例1策略接口public interface IStrategy { void AlgorithmInterface();}算法Apublic c...原创 2019-11-29 09:22:12 · 61 阅读 · 0 评论 -
模板方法
模板方法模板方法模式:定义一个操作中算法的框架,而将一些步骤延迟到子类中。模板方法模式使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤示例1以打豆浆为例,选择好豆子,添加配料,浸泡,打碎,其中只有添加配料是变化的抽象模板public abstract class SoyaMilkTemplate { //选材料 void select() { ...原创 2019-11-29 09:21:25 · 96 阅读 · 0 评论 -
代理模式
代理模式代理模式:为一个对象提供一个替身,以控制对这个对象的访问。即通过代理对象访问目标对象,可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象的功能代理模式有不同的形式, 主要有三种 静态代理、理 动态代理 (JDK 代理、接口代理)和 Cglib 理 代理 (可以在内存动态的创建对象,而不需要实现接口, 他是属于动态代理的范畴)静态代理静态代理在使用时,需要定义接口...原创 2019-11-29 09:20:38 · 91 阅读 · 0 评论 -
享元模式
享元模式享元模式(Flyweight Pattern):也叫蝇量模式,运用共享技术有效地支持大量细粒度对象的复用。系统只使用少量的对象,而这些对象都很相似,状态变化很小,可以实现对象的多次复用。由于享元模式要求能够共享的对象必须是细粒度对象,因此它又称为轻量级模式,它是一种对象结构型模式享元类的设计是享元模式的要点之一,在享元类中要将内部状态和外部状态分开处理,通常将内部状态作为享元类的成员...原创 2019-11-29 09:19:41 · 98 阅读 · 0 评论 -
外观模式
外观模式外观模式:为子系统中的一组接口提供一个统一的入口。外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用示例1以喝茶为例。张三和李四想喝茶了,需要煮水,准备茶具,准备茶叶,然后泡茶。如果他们去茶馆,只需要跟店小二说一句来杯茶,就可以喝到自己想喝的茶了,不需要关心茶馆是怎么煮水,准备茶具,准备茶叶的煮水public class Water { public ...原创 2019-11-29 09:18:17 · 75 阅读 · 0 评论 -
组合模式
组合模式组合模式(Composite Pattern):组合多个对象形成树形结构以表示具有“整体—部分”关系的层次结构。组合模式对单个对象(即叶子对象)和组合对象(即容器对象)的使用具有一致性,组合模式又可以称为“整体—部分”(Part-Whole)模式,它是一种对象结构型模式。对于树形结构,当容器对象(如文件夹)的某一个方法被调用时,将遍历整个树形结构,寻找也包含这个方法的成员对象(可以是...原创 2019-11-29 09:17:34 · 111 阅读 · 0 评论 -
装饰者模式
装饰者模式动态的将新功能附加到对象上。在对象功能扩展方面,它比继承更有弹性, 装饰者模式也体现了开闭原则(ocp)示例1抽象食物public abstract class Food { /** * 添加调料方法 */ abstract void add();}具体食物(面条)public class Noodle extends Foo...原创 2019-11-29 09:16:40 · 71 阅读 · 0 评论 -
桥接模式
桥接模式桥接模式(Bridge Pattern):将抽象部分与它的实现部分分离,使它们都可以独立地变化。它是一种对象结构型模式,又称为柄体(Handle and Body)模式或接口(Interface)模式。更容易理解的表述是:实现系统可从多种维度分类,桥接模式将各维度抽象出来,各维度独立变化,之后可通过聚合,将各维度组合起来,减少了各维度间的耦合。示例1抽象变速器public ab...原创 2019-11-29 09:15:56 · 89 阅读 · 0 评论 -
适配器模式
适配器模式适配器模式(Adapter Pattern):将一个接口转换成客户希望的另一个接口,使接口不兼容的那些类可以一起工作,其别名为包装器(Wrapper)。适配器模式既可以作为类结构型模式,也可以作为对象结构型模式。适配器模式分为类适配器模式、对象适配器模式、接口适配器模式。将一个类的接口转换成另一种接口.让原本接口不兼容的类可以兼容从用户的角度看不到被适配者,是解耦的用户调用适...原创 2019-11-28 08:41:58 · 132 阅读 · 0 评论 -
建造者模式
建造者模式建造者模式(Builder Pattern):将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。建造者模式是一种对象创建型模式。Builder(抽象建造者):它为创建一个产品Product对象的各个部件指定抽象接口,在该接口中一般声明两类方法,一类方法是buildPartX(),它们用于创建复杂对象的各个部件;另一类方法是getResult(),它们用于返...原创 2019-11-28 08:40:47 · 250 阅读 · 0 评论 -
原型模式
原型模式原型模式(Prototype Pattern):使用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。原型模式是一种对象创建型模式。需要注意的是通过克隆方法所创建的对象是全新的对象,它们在内存中拥有新的地址,通常对克隆所产生的对象进行修改对原型对象不会造成任何影响,每一个克隆对象都是相互独立的。通过不同的方式修改可以得到一系列相似但不完全相同的对象。Java 中 Obj...原创 2019-11-28 08:39:11 · 89 阅读 · 0 评论 -
单例模式
单例模式创建方式饿汉式( 静态常量)饿汉式(静态代码块)懒汉式(线程不安全)懒汉式(线程安全,同步方法)懒汉式(线程安全,同步代码块)双重检查静态内部类枚举饿汉式( 静态常量)步骤:构造器私有化 (防止 new )类的内部创建对象向外暴露一个静态的公共方法(getInstance)示例1单例对象: private Singleton01() {}...原创 2019-11-28 08:37:49 · 89 阅读 · 0 评论 -
抽象工厂模式
抽象工厂模式抽象工厂模式为创建一组对象提供了一种解决方案。与工厂方法模式相比,抽象工厂模式中的具体工厂不只是创建一种产品,它负责创建一族产品。在工厂方法模式中具体工厂负责生产具体的产品,每一个具体工厂对应一种具体产品,工厂方法具有唯一性,一般情况下,一个具体工厂中只有一个或者一组重载的工厂方法。但是有时候我们希望一个工厂可以提供多个产品对象,而不是单一的产品对象,如一个水果工厂,它可以生产苹果...原创 2019-11-28 08:36:09 · 151 阅读 · 0 评论 -
工厂方法模式
工厂方法模式工厂方法模式:定义一个用于创建对象的接口,但是让子类来决定到底创建哪一个实例。工厂方法模式让一个类的实例化延迟到其子类。工厂方法模式,简单来说是来为了解决简单工厂模式所出现的一些缺点而进行的改进。比如当一个简单的工厂模式要生产一个汽车,奥迪汽车,宝马汽车,但是如果要新增一个奔驰汽车。那么就要修改源代码,也就是修改工厂的源代码!添加一个业务逻辑,显然不符合开闭原则,所以就有了工厂方法...原创 2019-11-28 08:34:31 · 126 阅读 · 0 评论 -
简单工厂模式
简单工厂模式Factory(工厂角色):工厂角色即工厂类,它是简单工厂模式的核心,负责实现创建所有产品实例的内部逻辑;工厂类可以被外界直接调用,创建所需的产品对象;在工厂类中提供了静态的工厂方法factoryMethod(),它的返回类型为抽象产品类型ProductProduct(抽象产品角色):它是工厂类所创建的所有对象的父类,封装了各种产品对象的公有方法,它的引入将提高系统的灵活...原创 2019-11-28 08:33:01 · 92 阅读 · 0 评论 -
程序设计原则及设计模式
设计模式设计模式的目的重用性可读性可扩展性可靠性高内聚、低耦合设计模式原则单一职责原则一个类应该只负责一项职责,不要存在多于一个导致类变更的原因。如类 A 负责两个不同职责:职责 1,职责 2。当职责 1 需求变更,而改变 A 时,可能造成职责 2 执行错误,所以需要将类 A 的粒度分解为 A1,A2接口隔离客户端不应该依赖它不需要的接口,即 一...原创 2019-11-28 08:28:17 · 255 阅读 · 0 评论