设计模式
SmoMark
这个作者很懒,什么都没留下…
展开
-
设计模式——简单工厂模式
设计模式面向对象设计原则单一职责原则接口隔离原则依赖倒转原则里氏代换原则合成复用原则开闭原则迪米特法则简单工厂模式/静态工厂模式(Simple Factory Pattern/Static Factory Pattern)简单工厂模式:定义一个工厂类,他可以根据参数的不同返回不同的实例,被创建的实例通常都具有相同的父类。角色Factory(...原创 2018-08-10 22:32:23 · 185 阅读 · 0 评论 -
设计模式——职责链模式
职责链模式介绍职责链模式避免请求发送者与接收者耦合在一起,让多个对象都有可能接受请求,将这些对象连接成一条链,并且沿着这条链传递请求,知道有对象处理为止角色Handler(抽象处理者):一般设计为抽象类,定义了处理请求的接口和一个抽象处理者类型的对象作为对下家的引用ConcreteHandler(具体处理者):实现了抽象处理者定义的抽象处理请求方法,在处理之前需要判断是...原创 2018-08-15 09:20:20 · 188 阅读 · 0 评论 -
设计模式——装饰模式
装饰模式——扩展系统功能介绍装饰模式是一种用以替代继承的技术,使用对象的关联关系取代继承关系,通过引入装饰类,在装饰类中既可以调用待装饰的原有类的方法,也可以增加新的方法已达到扩充功能的目的角色Component(抽象构件):具体构件和抽象抽象装饰类的公共父类ConcreteComponent(具体构件):抽象构件的子类,实现了抽象构件中定义的方法,装饰器可以给它增加额...原创 2018-08-12 22:29:18 · 127 阅读 · 0 评论 -
设计模式——备忘录模式
备忘录模式介绍备忘录模式在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样可在之后将对象恢复到原先保存的状态角色Originator(原发器):将需要保存内部状态的类设计为原发器Memento(备忘录):参考原发器的实现,存储原发器的内部状态Caretaker(负责人):负责保存备忘录,不能够修改备忘录内容示例代码//原发...原创 2018-08-17 21:02:46 · 154 阅读 · 0 评论 -
设计模式——观察者模式
观察者模式介绍观察者模式/发布-订阅模式/模型-试图模式/源-监听器模式/从属者模式定义了一对一以及一对多的关系,让一个对象的改变能够影响其他对象角色Subject(目标/主题):被观察的对象,定义了观察者集合ConcreteSubject(具体目标/主题):若无需扩展目标类,则可省略Observer(抽象观察者):对观察目标的改变做出反应,一般定义为接口Concr...原创 2018-08-17 21:49:21 · 177 阅读 · 0 评论 -
设计模式——状态模式
状态模式介绍状态模式允许一个对象在其内部状态改变时改变他的行为,用于解决系统中复杂对象的状态转换以及不同行为下行为的封装问题角色Context(环境类):又称为上下文类,拥有多种状态的对象,其中维护了一个抽象状态类的实例State(抽象状态类):声明了各种状态对应的方法ConcreteState(具体状态类):每一个子类实现一个与环境类一个状态相关的行为,每一个具体状...原创 2018-08-17 22:26:39 · 176 阅读 · 0 评论 -
设计模式——策略模式
策略模式介绍策略模式主要目的是将算法的定义和使用分开,将每一个算法封装起来,并让他们可以相互替换角色Context(环境类):使用算法的角色,在解决某个问题时可以使用多种策略。环境类中维持了一个抽象策略类的引用实例Strategy(抽象策略类):可以是抽象类或具体类,为所支持的策略算法声明抽象方法ConcreteStrategy(具体策略类)示例代码...原创 2018-08-18 09:44:43 · 245 阅读 · 0 评论 -
设计模式——模板方法
模板方法介绍模板方法模式定义了一个操作中算法的框架,而将一些步骤延迟到子类中。模板方法使得子类可以在不改变一个算法的结构的基础上重定义该算法的某些步骤角色AbstractClass(抽象类):其中定义了一系列基本操作,每个操作可以是具体的或者抽象的,每个操作代表算法的一个步骤,子类可重定义这些步骤,同时,抽象类实现了一个模板方法,用于定义了一个算法的基本框架Concre...原创 2018-08-19 10:21:54 · 256 阅读 · 0 评论 -
设计模式——访问者模式
访问者模式介绍访问者模式提供一个作用于某对象结构中的各元素的操作表示,它使我们可以在不改变各元素的类的前提下定义作用于这些元素的新操作角色Visitor(抽象访问者):为对象结构中每一个具体元素声明一个访问操作,从该操作的名称或参数类型可以知道需要访问的具体元素的类型,具体访问者需要实现这些方法,定义对这些元素的访问操作ConcreteVisitor(具体访问者):实现...原创 2018-08-19 11:35:51 · 232 阅读 · 0 评论 -
23种设计模式学习汇总
设计模式系列学习总结创建型模式简单工厂模式工厂方法模式抽象工厂模式单例模式原型模式建造者模式结构型模式适配器模式桥接模式组合模式装饰模式外观模式享元模式代理模式职责链模式命令模式职责链模式解释器模式迭代器模式中介者模式备忘录模式观察者模式状态模式策略模式模板方法模式访问者模式源代码请参考 设计模式...原创 2018-08-19 20:47:08 · 226 阅读 · 0 评论 -
设计模式——迭代器模式
迭代器模式介绍迭代器模式提供一种方法来访问聚合对象,而不用暴露对象的内部结构,其别名称作游标(Cursor)角色Iterator(抽象迭代器):定义了访问和遍历元素的接口ConcreteIterator(具体迭代器):实现了抽象迭代器接口,完成对聚合对象的遍历,通过游标记录在聚合对象中所处的当前位置Aggregate(抽象聚合类):存储和管理对象元素,声明了creat...原创 2018-08-17 17:06:01 · 171 阅读 · 0 评论 -
设计模式——命令模式
命令模式介绍命令模式/动作模式/事务模式:将一个请求封装成请求对象,从而可以让我们用不同的请求对客户进行参数化角色Command(抽象命令类):一般是接口或者抽象类,其中声明了用于执行请求的方法ConcreteCommand(具体命令类):抽象命令类的子类,实现了其中声明的方法,对于具体的接收者,将接收者的动作绑定其中Invoker(调用者):请求发送者,通过命令对象...原创 2018-08-15 09:18:38 · 159 阅读 · 0 评论 -
设计模式——组合模式
组合模式介绍组合模式/整体-部分模式主要用于处理树形结构。组合模式对单个对象(叶子对象)和组合对象(容器对象)的使用具有一致性。角色Component(抽象构件):可以是接口或者抽象类,为叶子构件和容器构建声明接口和公共方法并提供管理子构件的方法,客户端针对抽象构件进行编程Leaf(叶子构件):实现了抽象构建中声明的行为Composite(容器构件):包含一个存储子节...原创 2018-08-12 17:12:05 · 154 阅读 · 0 评论 -
设计模式——工厂方法模式
工厂方法模式(Factory Method Pattern)背景简单工厂模式虽然简单,但是存在一个严重的问题,当有新的产品时,需要更改工厂类的代码,从而违反了开闭原则,而工厂方法模式应运而生。介绍工厂方法模式/虚拟构造器模式/多态工厂模式:针对不同的产品提供不同的工厂。定义一个用于创建对象的接口,让子类决定哪一个类被实例化。将类的实例化过程延迟到子类。角色Pr...原创 2018-08-10 22:33:27 · 103 阅读 · 0 评论 -
设计模式——抽象工厂模式
抽象工厂模式背景工厂方法模式虽然解决了简单工厂模式存在的工厂职责太重的问题,但是产生了另一个问题,即工厂数量太多。因此,我们考虑把一些相关的产品组成一个产品族,由工厂方法模式的工厂与产品一对一关系转变为抽象工厂模式的工厂与产品一对多的关系。介绍抽象工厂模式中的工厂与产品是一对多的关系。提供一个创建一系列相关或相互依赖的产品的接口,而无需指定他们的具体的类。在抽象工厂模式中,...原创 2018-08-11 13:37:55 · 150 阅读 · 0 评论 -
设计模式——外观模式
外观模式介绍外观模式/门面模式通过引入一个外观类,为子系统的一组接口提供一个统一的入口角色Facade(外观角色):将所有客户端的请求转发到相应的子系统中SubSystem(子系统角色):处理外观类传过来的请求示例代码//子系统Apublic class SubSystemA { public void methodA() { ...原创 2018-08-14 20:00:50 · 200 阅读 · 0 评论 -
设计模式——享元模式
享元模式介绍享元模式通过共享技术从而实现相同或者相似的对象的重用,从而达到降低系统开销的目的,一般与工厂模式结合使用,包含一个享元工厂类内部状态内部状态是指存储在享元模式内部并且不会随环境改变而改变的状态,内部状态可以共享外部状态外部状态是随环境改变而改变的不可以共享的状态,通常由客户端进行维护,在需要使用的时候传入到内部角色Flyweight(抽象享元...原创 2018-08-14 20:01:37 · 181 阅读 · 0 评论 -
设计模式——代理模式
代理模式介绍代理模式用于提供一个代理对象,并由代理对象控制对原对象的访问角色Subject(抽象主题角色):声明了真实主题和代理主题的共同接口Proxy(代理主题角色):包含对真实主题的引用,提供与真实主题相同的接口;通常在代理对象中客户端在调用所引用的真实对象方法之前或之后还需要执行某些操作RealSubject(真实主题角色):实现了真实的操作业务示例代...原创 2018-08-14 20:02:31 · 167 阅读 · 0 评论 -
设计模式——单例模式
单例模式实现方法构造函数私有自行创建实例通过公共静态方法像类外提供该实例示例代码(单线程)//单线程中的单例模式public class SingleThreadSinglePattern { private static SingleThreadSinglePattern tm = null; //构造方法私有化 private S...原创 2018-08-11 17:44:32 · 138 阅读 · 0 评论 -
设计模式——原型模式
原型模式介绍原型模式:使用原型实例指定创建对象的种类,通过拷贝原型创建新的对象。需要注意的是,通过克隆产生的新的对象与原对象之间没什么关联,二者之间拥有不同的地址。创建克隆对象的工厂就是原型本身,工厂方法由克隆方法来实现。角色Prototype(抽象原型类):声明克隆方法的接口,是所有具体原型类的公共父类ConcretePrototype(具体原型类):实现在抽象原型中...原创 2018-08-11 20:58:56 · 124 阅读 · 0 评论 -
设计模式——建造者模式
建造者模式介绍建造者模式/生成器模式:建造者模式为客户端返回的不是一个简单的产品,而是一系列部件的组合角色Builder(抽象建造者):为创建一个产品的各个部件提供接口。在该接口中一般声明创建各个部件的方法和返回复杂对象的方法ConcreteBuilder(具体建造者):实现抽象建造者声明的方法Product(产品角色):被构建的复杂对象,包含一系列部件Dire...原创 2018-08-11 21:26:59 · 149 阅读 · 0 评论 -
设计模式——适配器模式
适配器模式介绍适配器模式中引入了适配器的包装类,而它所包装的对象称为适配者,即被适配的类。适配器的实现就是把客户端的请求转化为对适配者的相应的接口的调用,即:当客户端调用适配器的方法时,在适配器的内部调用适配者的方法,而该过程对客户端来说是透明的。角色Target(目标抽象类):定义了客户端所需要的接口,其中目标抽象类可以是接口,抽象类或具体类Adapter(适配器类)...原创 2018-08-12 14:11:47 · 221 阅读 · 0 评论 -
设计模式——桥接模式
桥接模式桥接模式如果某个类存在两个独立变化的维度,通过桥接模式可以使两个维度分离出来,使二者可以独立扩展角色Abstraction(抽象类):定义了抽象类的接口,一般使用抽象类而不是接口实现,其中定义并维护了一个Implementor(实现类接口)对象RefinedAbstraction(扩充抽象类):扩充Abatraction所定义的接口,一般情况下是具体类,实现了A...原创 2018-08-12 14:50:14 · 226 阅读 · 1 评论 -
设计模式——中介者模式
中介者模式介绍中介者模式/调停者模式用一个中介对象来封装一系列的对象交互,中介者使各对象不需要显示的进行相互引用角色Mediator(抽象中介者):用于与各同事对象接口通信的接口ConcreteMediator(具体中介者):维持了各个同事对象的引用Colleague(抽象同事类):定义了各个同事类共有的方法,维持了一个抽象中介者类的引用ConcreteCollea...原创 2018-08-17 19:52:25 · 151 阅读 · 0 评论