
设计模式
成功人士从不写博客
这个作者很懒,什么都没留下…
展开
-
23种设计模式【Java】解析 -备忘录模式
备忘录模式目的在不违反封装的情况下获得对象的内部状态,在需要时可以将对象恢复到最初状态。类图角色Originator: 原始对象,发起人。Caretaker: 管理角色,负责保存好备忘录。Menento: 备忘录,负责存储发起人对象的内部状态,在需要的时候提供发起人需要的内部状态。实现这个就像打游戏时的存档独档机制,或者说 Ctrl + Z。备忘录public class Memento { private String state; public Memento原创 2020-07-12 16:40:16 · 249 阅读 · 0 评论 -
23种设计模式【Java】解析 -中介者模式
中介者模式目的集中相关对象之间复杂的沟通和控制方式。类图角色Mediator: 抽象中介者ConcreteMediator: 具体中介者Colleague: 抽象同事类ConcreteColleague: 具体同事类实现这个模式的现实案例最常见就是如其名的 中介 ,就拿租房中介来说,如果让租客和房东直接进行联系,是可以的,但是多对多的关系势必导致 结构 复杂,就需要一个中介。抽象中介者public abstract class Mediator { //申明一个联络方法原创 2020-07-12 16:39:00 · 303 阅读 · 0 评论 -
23种设计模式【Java】解析 - 迭代器模式
迭代器模式目的提供一种顺序访问聚合对象元素的方法,并且不暴露聚合对象的内部表示。类图角色Aggregate 聚合类,其中 createIterator() 方法可以产生一个 Iterator;ConcreteAggregate 具体聚合类,其中 createIterator() 方法可以产生一个 Iterator;Iterator 迭代器,主要定义了 hasNext() 和 next() 方法。ConcreteIterator 迭代器,主要定义了 hasNext() 和 next() 方法原创 2020-07-12 16:37:43 · 226 阅读 · 0 评论 -
23种设计模式【Java】解析 - 解释器模式
解释器模式目的为语言创建解释器,通常由语言的语法和语法分析来定义。类图角色AbstractExpression 抽象解释器:声明一个所有具体表达式都要实现的抽象接口(或者抽象类),接口中主要是一个 interpret() 方法,称为解释操作。TerminalExpression 终结符表达式:实现与文法中的元素相关联的解释操作,通常一个解释器模式中只有一个终结符表达式,但有多个实例,对应不同的终结符。终结符一半是文法中的运算单元,比如公式 R=R1+R2 , R1 和 R2 就是终结符,对应原创 2020-07-12 16:36:39 · 301 阅读 · 0 评论 -
23种设计模式【Java】解析 - 访问者模式
访问者模式目的为一个对象结构(比如组合结构)增加新能力。类图角色Visitor: 访问者。为每一个 ConcreteElement 声明一个 visit 操作ConcreteVisitor: 具体访问者。存储遍历过程中的累计结果ObjectStructure: 对象结构。可以是组合结构,或者是一个集合。Element:抽象元素。抽象元素一般是抽象类或者接口,它定义一个accept()方法,该方法通常以一个抽象访问者作为参数。ConcreteElement:具体元素。具体元素实现了acce原创 2020-07-12 16:35:14 · 364 阅读 · 0 评论 -
23种设计模式【Java】解析 - 观察者模式
观察者模式目的定义对象之间的一对多依赖,当一个对象状态改变时,它的所有依赖都会收到通知并且做出反应。发生改变的对象称为观察目标,而被通知的对象称为观察者,一个观察目标可以对应多个观察者,而且这些观察者之间没有相互联系。类图角色Subject: 目标ConcreteSubject: 具体目标Observer: 观察者ConcreteObserver: 具体观察者实现目标public interface Subject { void resisterObserve原创 2020-07-12 16:33:38 · 225 阅读 · 0 评论 -
23种设计模式【Java】解析 - 命令模式
命令模式目的将命令(请求)封装在对象中,以便使用命令来参数化其它对象,或将命令对象放入队列中排队,或将命令对象的操作记录到日志中,以及支持可撤销的操作。类图角色Command: 命令ConcreteCommand:具体命令Receiver: 命令接收者:命令真正的执行者Invoker: 通过它来调用命令实现设计一个遥控器,可以控制电灯开关。命令public interface Command { void execute();}具体命令开灯public cla原创 2020-07-05 18:32:29 · 257 阅读 · 0 评论 -
23种设计模式【Java】解析 - 策略模式
策略模式目的定义一系列算法,封装每个算法,并使它们可以互换。可以让算法独立于使用它的客户端。类图角色Context: 环境类Strategy: 抽象策略类ConcreteStrategy: 具体策略类实现抽象策略类public interface Strategy { public int doOperation(int num1, int num2);}抽象策略类public class OperationAdd implements Strategy{ @O原创 2020-07-05 18:31:24 · 272 阅读 · 0 评论 -
23种设计模式【Java】解析 - 状态模式
状态模式目的允许对象在内部状态改变时改变它的行为,对象看起来好像修改了它所属的类。其别名为状态对象(Objects for States),状态模式是一种对象行为型模式。类图角色Context: 环境类State: 抽象状态类ConcreteState: 具体状态类实现抽象状态类public interface State { public void doAction(Context context);}抽象状态类public class StartState imp原创 2020-07-05 18:30:33 · 302 阅读 · 0 评论 -
23种设计模式【Java】解析 -责任链
责任链目的使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链发送该请求,直到有一个对象处理它为止。类图角色抽象处理者(Handler)角色: 定义了处理请求的接口或者抽象类,提供了处理请求的的方法和设置下一个处理者的方法。具体处理者(ConcreteHandler)角色: 具体处理者接到请求后,可以选择将请求处理掉,或者将请求传给下家。实现抽象处理类public abstract class Handler { prot原创 2020-07-05 18:29:47 · 2150 阅读 · 0 评论 -
23种设计模式【Java】解析 - 模板方法
模板方法目的定义算法框架,并将一些步骤的实现延迟到子类。通过模板方法,子类可以重新定义算法的某些步骤,而不用改变算法的结构。类图角色AbstractClass:抽象类ConcreteClass: 具体实现类实现冲咖啡和冲茶都有类似的流程,但是某些步骤会有点不一样,要求复用那些相同步骤的代码。public abstract class CaffeineBeverage { final void prepareRecipe() { boilWater();原创 2020-07-05 18:28:25 · 334 阅读 · 0 评论 -
23种设计模式【Java】解析 - 代理模式
代理模式目的为其他对象提供一种代理以控制对这个对象的访问。介绍代理有四类:远程代理(Remote Proxy): 控制对远程对象(不同地址空间)的访问,负责将请求及其参数进行编码,并向不同地址空间中的对象发送已经编码的请求。虚拟代理(Virtual Proxy): 根据需要创建开销很大的对象,可以缓存实体的附加信息,以便延迟对它的访问,例如在网站加载一个很大图片时,不能马上完成,可以用虚拟代理缓存图片的大小信息,然后生成一张临时图片代替原始图片。保护代理(Protection Proxy):原创 2020-06-26 18:40:37 · 255 阅读 · 0 评论 -
23种设计模式【Java】解析 - 享元模式
享元模式目的实现对象的复用:利用共享的方式来支持大量细粒度的对象,这些对象一部分内部状态是相同的类图Flyweight: 抽象享元类ConcreteFlyweight: 具体享元类FlyweightFactory: 享元工厂类实现抽象享元类public interface Flyweight { // extrinsicState: 外部状态,每个享元对象的外部状态不同 void doOperation(String extrinsicState);}具体享元类原创 2020-06-26 18:40:02 · 253 阅读 · 0 评论 -
23种设计模式【Java】解析 - 装饰模式
装饰模式目的动态地给一个对象增加一些额外的职责。类图角色Component: 抽象构件ConcreteComponent: 具体构件 :用于定义具体的构件对象,实现了在抽象构件中声明的方法。Decorator: 抽象装饰类:用于给具体构件增加职责,但是具体职责在其子类中实现。ConcreteDecorator: 具体装饰类:抽象装饰类的子类,负责向构件添加新的职责。实现抽象构件使用奶茶的例子来说, 汉堡 是一个 Component 抽象构件,有一个方法 cost&nb原创 2020-06-26 18:39:14 · 296 阅读 · 0 评论 -
23种设计模式【Java】解析 - 组合模式
组合模式目的将对象组合成树形结构来表示“整体/部分”层次关系,允许用户以相同的方式处理单独对象和组合对象。类图Component :抽象构件类。定义参加组合对象的共有方法和属性,可以定义一些默认的行为或属性。Leaf :叶子对象。没有子结点。Composite:容器(树枝)构件。包含子节点,子节点可以是叶子节点,也可以是容器节点,提供一个集合用于存储子节点,实现抽象构建类public abstract class Component { protected String na原创 2020-06-26 18:38:27 · 309 阅读 · 0 评论 -
23种设计模式【Java】解析 - 桥接模式
桥接模式目的将抽象与实现分离开来,使它们可以独立变化。类图角色Abstraction:抽象类RefinedAbstraction:扩充抽象类Implementor:实现类接口ConcreteImplementor:具体实现类动机当某个类具有两个以上维度,如果事先就把每一个维度进行组合,那类的个数就是 n * m … l 了,如果将各维度抽象出来,之后在通过聚合,根据实际需求组合,减少了不必要继承或实现,也减少了维度间的耦合。实现实现类接口public interface Im原创 2020-06-26 18:37:37 · 279 阅读 · 0 评论 -
23种设计模式【Java】解析 - 外观模式
外观模式目的提供了一个统一的接口,用来访问子系统中的一群接口,从而让子系统更容易使用。类图角色Facade: 外观角色SubSystem:子系统角色实现子系统类public class SubSystemA { public void a() { ... }}public class SubSystemB { public void b() { ... }}外观类public class Facade {原创 2020-06-21 17:54:55 · 223 阅读 · 0 评论 -
23种设计模式【Java】解析-适配器模式
适配器模式目的将一个接口转换成用户希望的另一个接口,使接口不兼容的那些类可以一起工作,其别名为包装器(Wrapper)。类图角色Target:目标抽象类Adapter:适配器类Adaptee:适配者类Client:客户类对象适配器类适配器在对象适配器模式中,适配器与适配者之间是关联关系;在类适配器模式中,适配器与适配者之间是继承(或实现)关系,一般是指多重继承.但 Java 等语言不支持多重继承,所以在实际开发中,大多是使用对象适配器。实现类适配器//目标原创 2020-06-21 17:53:16 · 302 阅读 · 0 评论 -
23种设计模式【Java】解析-原型模式
原型模式目的使用原型实例指定要创建对象的类型,通过复制这个原型来创建新对象。类图角色Client : 调用类Prototype : 抽象原型类ConcretePrototype:具体实现类实现原型类public abstract class Prototype { abstract Prototype clone();}实现类public class ConcretePrototype extends Prototype { private String原创 2020-06-21 17:52:18 · 196 阅读 · 0 评论 -
23种设计模式【Java】解析-建造者模式
建造者模式目的封装一个对象的构造过程,并允许按步骤构造。类图角色Builder:抽象建造者ConcreteBuilder:具体建造者Director:指挥者Product:产品角色实现产品类public class Product { ...}抽象建造者public abstract class Builder { protected Product product = new Product(); // 具体的构建方法 public abstra原创 2020-06-21 17:51:27 · 198 阅读 · 0 评论 -
23种设计模式【Java】解析-抽象工厂
抽象工厂目的提供一个接口,用于创建相关的对象家族 。也就是说创建了很多对象而不是一个对象,且这些对象是相关的,必须一起创建出来。工厂方法是只用于创建一个对象。类图抽象工厂模式用到了工厂方法模式来创建单一对象, AbstractFactory中的 createProductA() 和 createProductB()方法都是让子类来实现,这两个方法单独来看就是在创建一个对象,这符合工厂方法模式的定义。至于创建对象的家族这一概念是在 Client 体现,Client 通过 AbstractFacto原创 2020-06-21 17:50:31 · 226 阅读 · 0 评论 -
23种设计模式【Java】解析-工厂方法
工厂方法目的定义一个创建对象的接口,但由子类决定要实例化哪个类,把实例化操作推迟到子类。类图在简单工厂中,创建对象的是另一个类,而在工厂方法中,是由子类来创建对象。下图中,Factory 有一个 doSomething()方法,这个方法需要用到一个产品对象,这个产品对象由 factoryMethod() 方法创建。该方法是抽象的,需要由子类去实现。角色Product:抽象产品ConcreteProduct:具体产品Factory:抽象工厂ConcreteFactory:具体工厂实原创 2020-06-21 17:48:23 · 298 阅读 · 0 评论 -
23种设计模式【Java】解析-简单工厂
简单工厂目的在创建一个对象时不向客户暴露内部细节,并提供一个创建对象的通用接口。类图简单工厂不是设计模式,更像是一种编程习惯。它把实例化的操作单独放到一个类中,这个类就成为简单工厂类,让简单工厂类来决定应该用哪个具体子类来实例化。把客户类和具体子类的实现解耦,客户类不再需要知道有哪些子类以及应当实例化哪个子类。因为客户类往往有多个,不使用简单工厂的话所有的客户类都要知道所有子类的细节,一旦子类发生改变,比如增加子类,所有的客户类都要进行修改。角色Factory:工厂角色Product:抽原创 2020-06-21 17:46:13 · 247 阅读 · 0 评论 -
23种设计模式【Java】解析-单例模式
单例模式确保一个类只有一个实例,并提供该实例的全局访问点,。类图使用一个私有构造函数、一个私有静态变量以及一个公有静态函数来实现。私有构造函数保证了不能通过构造函数来创建对象实例,只能通过公有静态函数返回唯一的私有静态变量。6种实现方式实现方式总结懒汉式-线程不安全私有静态变量 instance 被延迟实例化,这样做的好处是,如果没有用到该类,那么就不会实例化 instance,节约资源。但多线程环境下是不安全的,如果多线程能够同时进入 if (instance == null) ,且原创 2020-06-21 17:31:05 · 268 阅读 · 0 评论 -
23种设计模式【Java】全案例解析
具体解析创建型结构型7个原则单一职责原则【SINGLE RESPONSIBILITY PRINCIPLE】: 一个类负责一项职责。里氏替换原则【LISKOV SUBSTITUTION PRINCIPLE】: 继承与派生的规则。依赖倒置原则【DEPENDENCE INVERSION PRINCIPLE】: 高层模块不应该依赖低层模块,二者都应该依赖其抽象;抽象不应该依赖细节;细节应该依赖抽象。即针对接口编程,不要针对实现编程。接口隔离原则【INTERFACE SEGREGATION PRINC原创 2020-06-21 16:13:28 · 2784 阅读 · 0 评论