![](https://i-blog.csdnimg.cn/blog_column_migrate/e9cf3e85fff70a89ea678264519df56a.jpeg?x-oss-process=image/resize,m_fixed,h_224,w_224)
设计模式
设计模式介绍,主要分成创建型模式、结构型模式、行为型模式,通过代码实例来说明设计模式;
进修的CODER
沉迷学习,不能自拔。只要学不死,就往死里学。代码虐我千百遍,我待代码如初恋@_@
展开
-
Java实现23种设计模式(十七):策略模式(重点掌握)
二十三种设计模式分类一、概述策略(Strategy)模式的定义:该模式定义了一系列算法,并将每个算法封装起来,使它们可以相互替换,且算法的变化不会影响使用算法的客户。策略模式属于对象行为模式,它通过对算法进行封装,把使用算法的责任和算法的实现分割开来,并委派给不同的对象对这些算法进行管理。主要意图:定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换。主要解决:在有多种算法相似的情况下,使用if...else所带来的复杂和难以维护。优点多重条件语句不易维护,而使用策略模式可以避免原创 2020-06-11 11:40:48 · 418 阅读 · 0 评论 -
Java实现23种设计模式(十六):观察者模式(JDK方式实现和原生实现)(重点掌握)
二十三种设计模式分类一、概述观察者(Observer)模式的定义:指多个对象间存在一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。这种模式有时又称作发布-订阅模式、模型-视图模式,它是对象行为型模式。主要意图:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。主要解决:一个对象状态改变给其他对象通知的问题,而且要考虑到易用和低耦合,保证高度的协作。优点降低了目标与观察者之间的耦合关系,两者之间是抽原创 2020-06-11 11:08:54 · 430 阅读 · 1 评论 -
Java实现23种设计模式(十五):中介模式
二十三种设计模式分类一、概述中介者(Mediator)模式的定义:定义一个中介对象来封装一系列对象之间的交互,使原有对象之间的耦合松散,且可以独立地改变它们之间的交互。中介者模式又叫调停模式,它是迪米特法则的典型应用。主要意图:用一个中介对象来封装一系列的对象交互,中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。主要解决:对象与对象之间存在大量的关联关系,这样势必会导致系统的结构变得很复杂,同时若一个对象发生改变,我们也需要跟踪与之相关联的对象,同时做出相原创 2020-06-11 10:40:17 · 384 阅读 · 0 评论 -
Java实现23种设计模式(十四):迭代器模式
二十三种设计模式分类一、概述迭代器(Iterator)模式的定义:提供一个对象来顺序访问聚合对象中的一系列数据,而不暴露聚合对象的内部表示。意图:提供一种方法顺序访问一个聚合对象中各个元素, 而又无须暴露该对象的内部表示。主要解决:不同的方式来遍历整个集合对象,主要用于容器对象。优点迭代器模式是一种对象行为型模式,其主要优点如下。访问一个聚合对象的内容而无须暴露它的内部表示。遍历任务交由迭代器完成,这简化了聚合类。它支持以不同方式遍历一个聚合,甚至可以自定义迭代器的子类以支持新的遍历原创 2020-06-10 15:39:50 · 740 阅读 · 0 评论 -
Java实现23种设计模式(十三):备忘录模式
二十三种设计模式分类一、概述备忘录(Memento)模式的定义:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,以便以后当需要时能将该对象恢复到原先保存的状态。该模式又叫快照模式。主要解决:所谓备忘录模式就是在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样可以在以后将对象恢复到原先保存的状态。优点备忘录模式是一种对象行为型模式,其主要优点如下。提供了一种可以恢复状态的机制。当用户需要时能够比较方便地将数据恢复到某个历史的状态。实现原创 2020-06-10 15:30:24 · 378 阅读 · 0 评论 -
Java实现23种设计模式(十二):命令模式
二十三种设计模式分类一、概述命令(Command)模式的定义如下:将一个请求封装为一个对象,使发出请求的责任和执行请求的责任分割开。这样两者之间通过命令对象进行沟通,这样方便将命令对象进行储存、传递、调用、增加与管理。主要解决:在软件系统中,行为请求者与行为实现者通常是一种紧耦合的关系,但某些场合,比如需要对行为进行记录、撤销或重做、事务等处理时,这种无法抵御变化的紧耦合的设计就不太合适。优点降低系统的耦合度。命令模式能将调用操作的对象与实现该操作的对象解耦。增加或删除命令非常方便。采用命原创 2020-06-10 15:23:06 · 381 阅读 · 0 评论 -
Java实现23种设计模式(十一):代理模式(重点掌握)
二十三种设计模式分类一、概述在代理模式(Proxy Pattern)中,一个类代表另一个类的功能。这种类型的设计模式属于结构型模式。代理模式的定义:由于某些原因需要给某对象提供一个代理以控制对该对象的访问。这时,访问对象不适合或者不能直接引用目标对象,代理对象作为访问对象和目标对象之间的中介。优点代理模式在客户端与目标对象之间起到一个中介作用和保护目标对象的作用;代理对象可以扩展目标对象的功能;代理模式能将客户端与目标对象分离,在一定程度上降低了系统的耦合度;缺点在客户端和目标对原创 2020-06-10 11:51:04 · 248 阅读 · 0 评论 -
Java实现23种设计模式(十):享元模式
二十三种设计模式分类一、概述享元(Flyweight)模式的定义:运用共享技术来有効地支持大量细粒度对象的复用。它通过共享已经存在的又橡来大幅度减少需要创建的对象数量、避免大量相似类的开销,从而提高系统资源的利用率。主要解决在有大量对象时,有可能会造成内存溢出,我们把其中共同的部分抽象出来,如果有相同的业务请求,直接返回在内存中已有的对象,避免重新创建。优点相同对象只要保存一份,这降低了系统中对象的数量,从而降低了系统中细粒度对象给内存带来的压力。缺点提高了系统的复杂度,需要分离出外部状态原创 2020-06-10 11:31:39 · 243 阅读 · 0 评论 -
Java实现23种设计模式(九):外观模式
二十三种设计模式分类一、概述外观(Facade)模式的定义:是一种通过为多个复杂的子系统提供一个一致的接口,而使这些子系统更加容易被访问的模式。该模式对外有一个统一接口,外部应用程序不用关心内部子系统的具体的细节,这样会大大降低应用程序的复杂度,提高了程序的可维护性。优点外观(Facade)模式是“迪米特法则”的典型应用,它有以下主要优点。降低了子系统与客户端之间的耦合度,使得子系统的变化不会影响调用它的客户类。对客户屏蔽了子系统组件,减少了客户处理的对象数目,并使得子系统使用起来更加容易原创 2020-06-10 10:38:37 · 235 阅读 · 0 评论 -
Java实现23种设计模式(八):装饰器模式
二十三种设计模式分类一、概述装饰(Decorator)模式的定义:指在不改变现有对象结构的情况下,动态地给该对象增加一些职责(即增加其额外功能)的模式,它属于对象结构型模式。动态地给一个对象添加一些额外的职责。就增加功能来说,装饰器模式相比生成子类更为灵活。在现实生活中,常常需要对现有产品增加新的功能或美化其外观,如房子装修、相片加相框等。在软件开发过程中,有时想用一些现存的组件。这些组件可能只是完成了一些核心功能。但在不改变其结构的情况下,可以动态地扩展其功能。所有这些都可以釆用装饰模式来实现。原创 2020-06-05 15:55:15 · 287 阅读 · 0 评论 -
Java实现23种设计模式(七):组合模式
二十三种设计模式分类一、概述组合(Composite)模式的定义:有时又叫作部分-整体模式,它是一种将对象组合成树状的层次结构的模式,用来表示“部分-整体”的关系,使用户对单个对象和组合对象具有一致的访问性。将对象组合成树形结构以表示"部分-整体"的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。优点组合模式使得客户端代码可以一致地处理单个对象和组合对象,无须关心自己处理的是单个对象,还是组合对象,这简化了客户端代码;更容易在组合体内加入新的对象,客户端不会因为加入了新的对原创 2020-06-05 15:54:11 · 367 阅读 · 0 评论 -
Java实现23种设计模式(六):责任链模式(重点掌握)
二十三种设计模式分类一、概述责任链(Chain of Responsibility)模式的定义:为了避免请求发送者与多个请求处理者耦合在一起,将所有请求的处理者通过前一对象记住其下一个对象的引用而连成一条链;当有请求发生时,可将请求沿着这条链传递,直到有对象处理它为止。在责任链模式中,客户只需要将请求发送到责任链上即可,无须关心请求的处理细节和请求的传递过程,所以责任链将请求的发送者和请求的处理者解耦了。优点降低了对象之间的耦合度。该模式使得一个对象无须知道到底是哪一个对象处理其请求以及链的原创 2020-06-05 15:53:26 · 292 阅读 · 0 评论 -
Java实现23种设计模式(五):桥接模式
二十三种设计模式分类一、概述桥接(Bridge)模式的定义如下:将抽象与实现分离,使它们可以独立变化。它是用组合关系代替继承关系来实现,从而降低了抽象和实现这两个可变维度的耦合度。桥接模式主要想实现的是抽象部分和实现部分两个维度分别独立变化,用组合关系再将这两部分联系起来;例如某些类具有两个或多个维度的变化,如图形既可按形状分,又可按颜色分。如何设计类似于 Photoshop 这样的软件,能画不同形状和不同颜色的图形呢?如果用继承方式,m 种形状和 n 种颜色的图形就有 m×n 种,不但对应的子类很原创 2020-06-05 11:03:44 · 280 阅读 · 0 评论 -
Java实现23种设计模式(四):适配器模式(重点掌握)
二十三种设计模式分类一、概述适配器模式(Adapter Pattern)是作为两个不兼容的接口之间的桥梁。这种类型的设计模式属于结构型模式,它结合了两个独立接口的功能。这种模式涉及到一个单一的类,该类负责加入独立的或不兼容的接口功能。举个真实的例子,读卡器是作为内存卡和笔记本之间的适配器。您将内存卡插入读卡器,再将读卡器插入笔记本,这样就可以通过笔记本来读取内存卡。优点客户端通过适配器可以透明地调用目标接口。复用了现存的类,程序员不需要修改原有代码而重用现有的适配者类。将目标类和适配者类原创 2020-06-05 10:45:47 · 307 阅读 · 0 评论 -
Java实现23种设计模式(三):原型模式
二十三种设计模式分类一、概述原型(Prototype)模式的定义如下:用一个已经创建的实例作为原型,通过复制该原型对象来创建一个和原型相同或相似的新对象。在这里,原型实例指定了要创建的对象的种类。用这种方式创建对象非常高效,根本无须知道对象创建的细节。优点1、性能提高。2、逃避构造函数的约束。缺点1、配备克隆方法需要对类的功能进行通盘考虑,这对于全新的类不是很难,但对于已有的类不一定很容易,特别当一个类引用不支持串行化的间接对象,或者引用含有循环结构的时候。2、必须实现 Cloneabl原创 2020-06-05 10:28:56 · 244 阅读 · 0 评论 -
Java实现23种设计模式(二):建造者模式(Builder模式)
二十三种设计模式分类一、概述建造者模式(Builder Pattern)使用多个简单的对象一步一步构建成一个复杂的对象。将一个复杂对象的构建与其表示相分离,同样的构造过程可以创建不同的表示。主要解决复杂对象的创建,将变与不变部分分隔开来;优点各个具体的建造者相互独立,有利于系统的扩展。客户端不必知道产品内部组成的细节,便于控制细节风险。缺点产品的组成部分必须相同,这限制了其使用范围。如果产品的内部变化复杂,该模式会增加很多的建造者类。场景需要生成的对象具有复杂的内部结构。原创 2020-05-31 13:38:19 · 326 阅读 · 0 评论 -
Java实现23种设计模式(一):单例模式(饿汉、懒汉、双重锁、静态内部类、枚举实现)(重点掌握)
二十三种设计模式分类一、概述单例(Singleton)模式的定义:指一个类只有一个实例,且该类能自行创建这个实例的一种模式。例如,Windows中只能打开一个任务管理器,这样可以避免因打开多个任务管理器窗口而造成内存资源的浪费,或出现各个窗口显示内容的不一致等错误。注意:1、单例类只能有一个实例。2、单例类必须自己创建自己的唯一实例。3、单例类必须给所有其他对象提供这一实例。优点1、在内存里只有一个实例,减少了内存的开销,尤其是频繁的创建和销毁实例(比如首页页面缓存)。2、避免对资原创 2020-05-31 13:13:26 · 1029 阅读 · 0 评论 -
JDK动态代理简单使用方法+通过Proxy和InvocationHandler源码解析原理
一、JDK动态代理的使用JDK动态代理模式是基于接口,所以我们先定义一个Moveable接口:public interface Moveable { void go();}再定义一个需要被代理的Car类:public class Car implements Moveable { @Override public void go() { Syst...原创 2020-04-28 17:04:45 · 543 阅读 · 0 评论 -
java8 Lambda表达式+责任链模式
/** *责任链模式是一种创建处理对象序列(比如操作序列)的通用方案。一个处理对象可能需要 * 在完成一些工作之后,将结果传递给另一个对象,这个对象接着做一些工作,再转交给下一个处 * 理对象,以此类推。 * 通常,这种模式是通过定义一个代表处理对象的抽象类来实现的,在抽象类中会定义一个字 * 段来记录后续对象。一旦对象完成它的工作,处理对象就会将它的工作转交给它的后继。代码...原创 2019-03-15 22:04:55 · 2063 阅读 · 0 评论 -
java8 Lambda表达式+观察者模式
/** * 观察者模式是一种比较常见的方案,某些事件发生时(比如状态转变),如果一个对象(通 * 常我们称之为主题)需要自动地通知其他多个对象(称为观察者),就会采用该方案。创建图形 * 用户界面(GUI)程序时,你经常会使用该设计模式。这种情况下,你会在图形用户界面组件(比 * 如按钮)上注册一系列的观察者。如果点击按钮,观察者就会收到通知,并随即执行某个特定的 * 行为。...原创 2019-03-15 21:58:40 · 826 阅读 · 0 评论 -
java8 Lambda表达式+策略设计模式
/** * 策略模式代表了一类算法的通用解决方案,可以在运行时选择那种方案 */public interface Strategy { boolean execute(String s);}class IsAllLowerCase implements Strategy{ @Override public boolean execute(Stri...原创 2019-03-15 21:51:15 · 1115 阅读 · 0 评论 -
Java 23种设计模式
**创建型模式** 单例模式:确保一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。 工厂方法模式:定义一个用于创建对象的接口,让子类决定实例化那个类。工厂方法使一个类的实例化延迟到其子类。 抽象厂方法模式:为创建一组相关或相互依赖的对象的提供一个接口,而且无须指定它们具体类。建造者模式:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 原型模式原创 2015-10-31 22:19:38 · 513 阅读 · 0 评论