
设计模式
文章平均质量分 75
本栏包含了23种 GoF 设计模式,加上简单工厂模式共24种。包含类图、代码、案例分析、JDK中应用场景。语言简洁、案例简单,适合初学者和面试者。
little_fat_sheep
图形学领域爱好者,未来将在图形渲染(OpenGL、LibGDX、Filament、Unity3D、UE)、图形编解码(FFmpeg)等领域长期深耕。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
设计模式汇总
1 面向对象设计原则单一职责原则(Single Responsibility Principle,SRP):不能将太多的职责放在一个类中; 开闭原则(Open-Close Principle,OCP):软件实体对扩展是开放的,对修改是关闭的; 里氏替换原则(Liskov SubstitutionPrinciple,LSP):一个可以接受基类对象的地方,必然可以接受子类对象; 依赖倒转原...原创 2019-11-06 21:04:48 · 649 阅读 · 2 评论 -
【设计模式】访问者模式
1 简介访问者模式(Visitor Pattern)定义:表示一个作用于某对象结构中的各元素的操作,它使我们可以在不改变各元素的类的前提下,定义作用于这些元素的新操作。访问者模式对“开闭原则”的支持存在倾斜性,增加新的访问者方便,但是增加新的元素很麻烦。2 代码(1)抽象访问者(Visitor)public abstract class Visitor { protec...原创 2019-11-06 16:32:45 · 404 阅读 · 0 评论 -
【设计模式】模板方法模式
1 简介模板方法模式(Template Method Pattern)定义:定义一个操作中算法的骨架,而将一些步骤延迟到子类中,模板方法使得子类可以不改变一个算法的结构,即可重定义该算法的某些特定步骤。模板方法(Template Method):一个模板方法是定义在抽象类中的、把基本方法组合在一起,形成一个总算法或一个总行为的方法。模板方法是一个具体方法,它给出了一个顶级逻辑的骨架,而...原创 2019-11-06 11:31:19 · 270 阅读 · 0 评论 -
【设计模式】策略模式
1 简介策略模式(Strategy Pattern)定义:定义一系列算法,将每一个算法封装起来,让算法独立于使用它的客户而变化,并让它们可以相互替换。2 代码(1)环境类(Context)环境类是使用算法的角色,它在解决某个问题(即实现某个方法)时可以采用多种策略。在环境类中维护一个对抽象策略类的引用实例,用于定义所采用的策略。public class Context {...原创 2019-11-06 09:21:01 · 280 阅读 · 0 评论 -
【设计模式】状态模式
1 简介状态模式(State Pattern)定义:允许一个对象在其内部状态改变时改变它的行为,对象看起来修改了它所属的类。环境类(Context)又称上下文类,它是拥有状态(State)的对象,但是由于其状态存在多样性,且在不同状态下对象的行为有所不同,因此将状态独立出去,形成单独的状态类。2 代码(1)环境类(Context)public class Contex...原创 2019-11-05 18:49:05 · 301 阅读 · 0 评论 -
【设计模式】观察者模式
1 简介观察者模式(Observer Pattern)定义:定义对象间的一种一对多依赖关系,使得每当一个对象状态发生改变时,其相关依赖对象都得到通知并被自动更新。2 代码(1)抽象目标类(Subject)public abstract class Subject { protected ArrayList<Observer> observers=new Arra...原创 2019-11-05 14:38:05 · 228 阅读 · 0 评论 -
【设计模式】备忘录模式
1 简介备忘录模式(Memento Pattern)定义:在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样可以在以后将对象恢复到原先保存的状态。2 代码(1)原发器(Originator)public class Originator { private String state; public Originator(String sta...原创 2019-11-05 10:37:48 · 229 阅读 · 0 评论 -
【设计模式】中介者模式
1 简介中介者模式(Mediator Pattern)定义:用一个中介对象来封装一系列的对象交互,中介者使各对象不需要显示的相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。2 代码(1)抽象中介者(Mediator)public abstract class Mediator { protected HashMap<String,Colleague>...原创 2019-11-04 20:53:35 · 269 阅读 · 0 评论 -
【设计模式】迭代器模式
1 简介迭代器模式(Iterator Pattern)定义:提供一种方法来访问聚合对象,遍历聚合对象中每个元素,而不用暴露该对象的内部表示。2 代码2.1 普通方法实现(1)抽象迭代器(Iterator)public interface Iterator { public boolean hasNext(); public Object next(); defaul...原创 2019-11-03 16:04:00 · 341 阅读 · 0 评论 -
【设计模式】解释器模式
1 简介解释器模式(Interpreter Pattern)定义:定义语言的语法,并建立一个解释器来解释该语言中的句子,这里的“语言”指使用规定格式和语法的代码。它用于描述如何构成一个简单的语言解释器,主要应用于使用面向对象语言开发的编译器和解释器设计。2 代码(1)环境类(Context)import java.util.HashMap;public class Con...原创 2019-11-03 11:00:48 · 324 阅读 · 0 评论 -
【设计模式】命令模式
1 简介命令模式(Command Pattern)定义:将一个请求封装为一个对象,从而使我们可用不同的请求对客户进行参数化;对请求排队或者记录请求日志,以及支持可撤销的操作。命令模式的本质是对命令进行封装,将发出命令的责任和执行命令的责任分开,使得请求方不必知道接受方的接口,更不必知道请求是怎么被接受、操作是否被执行、何时被执行,以及是怎么被执行的。2代码(1)接受者(R...原创 2019-11-02 20:18:18 · 350 阅读 · 0 评论 -
【设计模式】职责链模式
1 简介职责链模式(Chain of Responsibility Pattern)定义:避免请求发送者与接受者耦合在一起,让多个对象都有可能接受请求,将这些对象连接成一条链,并且沿着这条链传递请求,直到有对象处理它为止。2 代码(1)抽象处理者(Handler)public abstract class Handler { protected Handler succes...原创 2019-11-01 16:55:53 · 429 阅读 · 0 评论 -
【设计模式】代理模式
1 简介代理模式(Proxy Pattern)定义:给某个对象提供一个代理,并由代理对象控制对原对象的引用。当直接访问某些对象存在问题时,可以通过一个代理对象来间接访问,为了保证客户端使用的透明性,代理对象与真实对象需要实现相同的接口。根据代理模式的使用目的不同,代理模式又可分为多种类型,如远程代理、虚拟代理、保护代理、缓冲代理、防火墙代理、同步化代理、智能引用代理等,它们应用于不同的场合...原创 2019-10-31 19:53:10 · 335 阅读 · 0 评论 -
【设计模式】享元模式
1 简介享元模式(Flyweight Pattern)定义:运用共享技术有效地支持大量细粒度对象的复用。系统只是用少量的对象而这些对象都很相似,状态变化很小,可以实现对象的多次复用。2 代码(1)抽象享元类(Flyweight)public interface Flyweight { public void operation(String extrinsicState);...原创 2019-10-31 14:28:57 · 269 阅读 · 0 评论 -
【设计模式】外观模式
1 简介外观模式(Facade Pattern)定义:为子系统的一组接口提供一个统一的入口,定义一个高层接口,这个接口使得这一子系统更容易使用。2 代码(1)外观类(Facade)public class Facade { private SubSystemA sysA=new SubSystemA(); private SubSystemB sysB=new SubSy...原创 2019-10-30 21:18:45 · 268 阅读 · 0 评论 -
【设计模式】装饰模式
1 简介装饰模式(Decorator Pattern)定义:动态地给一个对象添加一些额外的职责,就扩展功能而言,它比生成子类方式更灵活。不使用继承,而通过关联关系来调用现有类中的方法,达到复用的目的,并使得对象的行为可以灵活变化。2 代码(1)抽象构件(Component)public abstract class Component { public abstract v...原创 2019-10-29 19:21:29 · 364 阅读 · 0 评论 -
【设计模式】组合模式
1 简介组合模式(Composite Pattern)定义:将对象组合成树形结构,以表示“部分—整体”的层次结构。它使得客户对单个对象和复合对象的使用具有一致性。2 代码(1)抽象构建(Component)public abstract class Component { String info; public abstract void add(Component ...原创 2019-10-29 10:45:25 · 279 阅读 · 0 评论 -
【设计模式】桥接模式
1 简介桥接模式(Bridge Pattern)定义:将抽象部分(Abstraction)与它的实现部分(Implementor)分离,使得它们可以独立的变化。当事物存在两个独立变化的纬度时,将两个变化因素抽取出来形成高层次的关联关系,使原本复杂的类继承结构变得相对简单,极大减少系统中类的个数。假如要绘制三角形、正方形、圆形3种形状的图形,每个图形包含红色、绿色、蓝色3种颜色,此时有如...原创 2019-10-28 20:39:07 · 291 阅读 · 0 评论 -
【设计模式】适配器模式
1 简介适配器(Adapter)模式可以将一个类的接口和另一个类的接口匹配起来,使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。使用的前提是不能或不想修改原来的适配者(Adaptee)接口和抽象目标类(Target)接口。如向第三方购买了一些类、控件,如果没有原代码,这时使用适配器模式可以统一对象访问接口。适配器包含类适配器和对象适配器。类适配器:适配器类(Adapter)继承自...原创 2019-10-28 14:39:19 · 1397 阅读 · 0 评论 -
【设计模式】单例模式
1 简介保证一个类中,仅有一个实例,并提供一个访问它的全局访问点。要点如下:该类只有一个实例 它必须自行创建这个实例 它必须自行向整个系统提供这个实例2 代码2.1 饿汉模式类加载时就生成了一个对象。public class Singleton { private static final Singleton singleton=new Singleton(); ...原创 2019-10-27 20:58:47 · 255 阅读 · 0 评论 -
【设计模式】原型模式
1 简介用原型实例指定创建对象的种类,并且通过复制这个原型来创建新的对象。原型模式包含深克隆和浅克隆两种形式。浅克隆:对于基本类型成员变量,复制值;对于引用类型成员变量,复制对象地址;深克隆:对于基本类型成员变量,复制值;对于引用类型成员变量,复制对象;2Cloneable接口和Serializable接口Cloneable接口和Serializable接口代码都非常简单,它...原创 2019-10-27 18:55:47 · 321 阅读 · 0 评论 -
【设计模式】建造者模式
1 简介将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示,一步一步构造一个由多个部分组成的复杂对象。2 代码(1)产品(Product)public class Product { private String partA; private String partB; public void setPartA(String s) { part...原创 2019-10-27 15:49:33 · 391 阅读 · 0 评论 -
【设计模式】简单工厂模式、工厂方法模式、抽象工厂模式
1 简介简单工厂模式:根据传入的参数返回需要创建的对象,而不需要知道具体类的类名。(不属于GoF设计模式) 工厂方法模式:引入抽象工厂类,将具体产品的创建过程封装在其子类中,即具体工厂类中。增加新的具体产品类时,只需增加一个相应的具体工厂类。(1个具体工厂只需生产1种具体产品) 抽象工厂模式:相较于工厂方法模式,抽象工厂模式中的具体工厂可以生产相关的一组具体产品,这样的一组产品称之为产品族...原创 2019-10-24 21:49:34 · 426 阅读 · 0 评论