Java设计模式
文章平均质量分 52
Java 二十三种设计模式原理介绍,优缺点分析,代码实现。
赴前尘
惜春春去
展开
-
Java设计模式之命令模式
命令模式定义:命令模式把一个请求或者操作封装到一个对象中。命令模式允许系统使用不同的请求把客户端参数化,对请求排队或者记录请求日志,可以提供命令的撤销和恢复功能。优点: 1)将发起请求的对象与执行请求的对象解耦。发起请求的对象是调用者,调用者只要调用命令对象的execute()方法就可以让接收者工作,而不必知道具体的接收者对象是谁、是如何实现的,命令对象会负责让接收者执行请求的动作,命令对象起到了纽带桥梁的作用。2) 容易设计一个命令队列。只要把命令对象放到列队,就可以多线程的执行命令。3) 容原创 2021-08-14 09:40:13 · 381 阅读 · 0 评论 -
Java设计模式之模板方法模式
模板方法模式定义:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法模式使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。优点:1)封装不变部分,扩展可变部分。2)提取公共代码,便于维护。3)行为由父类控制,子类实现。缺点:每一个不同的实现都需要一个子类来实现,导致类的个数增加,使得系统更加庞大。博客:https://blog.csdn.net/pange1991/article/details/81183122实例:创建一个定义操作的 Game 抽象类,其中,模板方法原创 2021-08-14 09:39:19 · 119 阅读 · 0 评论 -
Java设计模式之状态模式
状态模式定义:允许一个对象在其内部状态改变时改变它的行为,对象看起来似乎修改了它的类。优点:1) 每个状态都是一个子类,只要增加状态就要增加子类,修改状态,只修改一个子类即可。符合“开闭原则”。容易增删状态。2)结构清晰,避免了过多的switch…case或者if…else语句的使用,避免了程序的复杂性,提高可维护性。缺点:会产生很多类。每个状态都要一个对应的类,当状态过多时会产生很多类,加大维护难度。博客:https://blog.csdn.net/qq_31984879/arti原创 2021-08-14 09:40:33 · 139 阅读 · 0 评论 -
Java设计模式之责任链模式
责任链模式定义:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。优点:1)降低耦合度。它将请求的发送者和接收者解耦。 2)简化了对象。使得对象不需要知道链的结构。 3)增强给对象指派职责的灵活性。通过改变链内的成员或者调动它们的次序,允许动态地新增或者删除责任。 4)增加新的请求处理类很方便。缺点:1)不能保证请求一定被接收。 2)系统性能将受到一定影响,而且在进行代码调试时不太方便,可能会造成原创 2021-08-13 16:51:34 · 113 阅读 · 0 评论 -
Java设计模式之观察者模式
观察者模式定义:又叫发布-订阅模式(Publish/Subscribe),定义对象间一种一对多的依赖关系,使得每当一个对象改变状态,则所有依赖于它的对象都会得到通知并自动更新。优点:观察者模式设计后,会以集合的方式来管理用户(Observer),包括注册,移除和通知。这样,增加观察者(这里可以理解成一个新的公告板),就不需要去修改核心类Newspaper不会修改代码,遵守了OCP原则。缺点:在应用观察者模式时需要考虑一下开发效率和运行效率的问题,程序中包括一个被观察者、多个观察者,开发、调原创 2021-08-13 16:50:25 · 190 阅读 · 0 评论 -
Java设计模式之策略模式
策略模式定义:定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换。本模式使得算法可独立于使用它的客户而变化。优点:(1)策略模式提供了管理相关的算法族的办法。策略类的等级结构定义了一个算法或行为族。恰当使用继承可以把公共的代码移到父类里面,从而避免代码重复。(2)使用策略模式可以避免使用多重条件(if-else)语句。多重条件语句不易维护,它把采取哪一种算法或采取哪一种行为的逻辑与算法或行为的逻辑混合在一起,统统列在一个多重条件语句里面,比使用继承的办法还要原始和落后。缺点:(原创 2021-08-13 16:49:13 · 162 阅读 · 0 评论 -
Java设计模式之代理模式
代理模式定义:代理模式是一种设计模式,提供了对目标对象额外的访问方式,即通过代理对象访问目标对象,这样可以在不修改原目标对象的前提下,提供额外的功能操作,扩展目标对象的功能。代理模式之静态代理优点:可以在不修改目标对象的前提下扩展目标对象的功能。缺点:1)冗余。由于代理对象要实现与目标对象一致的接口,会产生过多的代理类。2)不易维护。一旦接口增加方法,目标对象与代理对象都要进行修改。实例:以发送信息服务为例,在发送信息前后添加额外的操作。类图:代码:/**原创 2021-08-13 16:47:57 · 105 阅读 · 0 评论 -
Java设计模式之外观模式
外观模式定义:外观模式通过定义一个一致的接口,用以屏蔽内部子系统的细节,使得调用端只需跟这个接口发生调用,而无需关心这个子系统的内部细节。优点:1) 外观模式对外屏蔽了子系统的细节,因此外观模式降低了客户端对子系统使用的复杂性。2) 外观模式对客户端与子系统的耦合关系,让子系统内部的模块更易维护和扩展。3) 通过合理的使用外观模式,可以帮我们更好的划分访问的层次。4) 当系统需要进行分层设计时,可以考虑使用Facade模式缺点:不能过多的或者不合理的使用外观模式,使用外观模式好,还是直接调原创 2021-08-13 16:45:57 · 553 阅读 · 0 评论 -
Java设计模式之装饰器模式
装饰器模式定义:装饰器模式以对客户透明的方式动态的给一个对象附加上更多的责任。换言之,客户端并不会觉得对象在装饰前和装饰后有什么不同。优点:1) 装饰模式与继承关系的目的都是要扩展对象的功能,但是装饰模式可以提供比继承更多的灵活性。2) 通过使用不同的具体装饰类以及这些装饰类的排列组合,设计师可以创造出很多不同行为的组合。缺点:使用装饰模式会产生比使用继承关系更多的对象。更多的对象会使得查错变得困难,特别是这些对象看上去都很相像。博客:https://www.jianshu.com/原创 2021-08-13 16:43:47 · 130 阅读 · 0 评论 -
Java设计模式之适配器模式
适配器模式定义:适配器模式把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。博客:https://www.cnblogs.com/java-my-life/archive/2012/04/13/2442795.html适配器模式之类适配器模式实现方式:让Adapter继承Adaptee类,然后再实现Target接口,来实现适配器功能。优点:由于Adapter继承了Adaptee类,所以它可以根据需求重写Adaptee原创 2021-08-13 16:42:31 · 1567 阅读 · 1 评论 -
Java设计模式之单例模式
单例模式定义:采取一定的方法保证在整个的软件系统中,对某个类只能存在一个对象实例,并且该类只提供一个取得其对象实例的方法(静态方法)。单例模式之饿汉模式(静态常量)实现方式:1) 构造器私有化 (防止 new )。2) 类的内部创建对象。3) 向外暴露一个静态的公共方法。优点:写法比较简单,就是在类装载的时候就完成实例化。避免了线程同步问题。缺点:在类装载的时候就完成实例化,没有达到Lazy Loading的效果。如果从始至终从未使用过这个实例,则会造成内存的浪费。代码:原创 2021-08-13 16:37:44 · 102 阅读 · 0 评论 -
Java设计模式之工厂模式
工厂模式(简单工厂模式)定义:简单工厂模式是属于创建型模式,是工厂模式的一种。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。简单工厂模式是工厂模式家族中最简单实用的模式。实例:有披萨,汉堡包,鸡腿三种食物,将创建的具体食物对象封装到一个工厂类中,由这个类来封装实例化对象。类图代码/*** 抽象产品(食物)*/interface Food { /*** 吃食物的方法*/ void eat();}/*** 具体产品:汉堡包*/class Hamb原创 2021-08-13 16:40:17 · 163 阅读 · 0 评论 -
Java面试常考设计模式总结以及案例代码演示
Java 设计模式设计模式分类:设计模式分为三种类型,共23种创建型模式单例模式、工厂模式、抽象工厂模式、原型模式、建造者模式结构型模式适配器模式、装饰器模式、外观模式、代理模式、桥接模式、装组合模式、享元模式行为型模式策略模式、观察者模式、责任链模式、状态模式、命令模式、模版方法模式、访问者模式、迭代器模式、中介者模式、备忘录模式、解释器模式需要掌握的设计模式创建型模式单例模式定义:采取一定的方法保证在整个的软件系统中,对某个类只能存在一个对象实例,并且该类只提供一个取得其对原创 2021-08-13 15:37:39 · 125 阅读 · 0 评论 -
Java设计模式 - 原型模式介绍(浅拷贝与深拷贝的实现)
一:原型模式的定义?定义:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。简单地讲:给定一个原型对象来指明所要创建的对象的类型,然后用拷贝这个原型对象的方法来创建出更多的同类型对象。二:JAVA中原型模式的实现?在JAVA里,通过克隆(Clone())方法来实现原型模式。任何类,要想支持克隆,必须实现一个接口 Cloneable,该...原创 2018-06-26 01:03:50 · 2955 阅读 · 0 评论