Java设计模式
文章平均质量分 73
Java设计模式的基本使用和原理解析
Bulut0907
大数据、机器学习、编程语言、IT相关技术分享, 喜欢请关注、点赞、收藏哦!
展开
-
Java设计模式之备忘录模式
定义:备忘录模式(Memento Pattern)在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。备忘录模式属于行为型模式优点给用户提供了一种可以恢复状态的机制,可以使用户能够比较方便地回到某个历史的状态实现了信息的封装,使得用户不需要关心状态的保存细节相比直接进行对象的保存,能减少内存的开销。为了节约更多的内存,备忘录模式可以和原型模式配合使用缺点。原创 2022-09-07 09:11:38 · 266 阅读 · 0 评论 -
Java设计模式之访问者模式
定义:访问者模式(Visitor Pattern),封装一些作用于某种数据结构的各元素的操作,它可以在不改变数据结构的前提下定义作用于这些元素的新的操作。基本工作原理是:在被访问的类里面加一个对外提供接待访问者的接口优点可以很方便的添加新的访问者,保证了开闭原则,利于维护将数据结构与数据操作分离,解决数据结构和操作耦合性问题符合单一职责原则、让程序具有优秀的扩展性、灵活性非常高可以对功能进行统一,可以做报表、UI、拦截器与过滤器,适用于数据结构相对稳定的系统缺点不能方便的添加新的元素者。原创 2022-09-06 09:32:18 · 1260 阅读 · 0 评论 -
Java设计模式之迭代器模式
定义:迭代器模式(Iterator Pattern)属于行为型模式。如果我们的集合元素是用不同的方式实现的,有数组、集合类(ArrayList等)、其他方式,当客户端要遍历这些集合元素的时候就要使用多种遍历方式,而且还会暴露元素的内部结构,可以考虑使用迭代器模式解决。其提供一种遍历集合元素的统一接口,用一致的方法遍历集合元素,还不暴露集合元素的内部结构优点提供一个统一的方法遍历对象,客户不用再考虑聚合的类型,使用一种方法就可以遍历对象了。原创 2022-09-06 09:29:12 · 280 阅读 · 0 评论 -
Java设计模式之中介者模式
定义:中介者模式(Mediator Pattern),用一个中介对象来封装一系列的对象交互。中介者使各个对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。中介者模式属于行为型模式优点各个客户只需和中介进行交互,将网状结构分离为星型结构,进行了解耦。符合迪米特原则可以很方便的增加新的客户类,维护性和拓展性好缺点:中介者承担了较多的责任,变得过于复杂,一旦中介者出现了问题,整个系统就会受到影响适用场景。原创 2022-09-05 09:26:30 · 512 阅读 · 0 评论 -
Java设计模式之观察者模式
定义:对象之间多(Observer)对一(Subject)依赖的一种设计方案,被依赖的对象为Subject,依赖的对象为Observer,Subject通知Observer变化优点以集合的方式来管理用户(Observer),可以动态的添加和删除观察者,满足开闭原则数据更新时可以及时的通知观察者缺点如果观察者很多,所有的观察者都通知会花费很多时间观察者模式没有相应的机制使观察者知道所观察的对象是怎么发生变化的适用场景对一个对象状态的更新,需要其他对象同步更新,而且其他对象的数量动态可变。原创 2022-09-05 09:24:51 · 283 阅读 · 0 评论 -
Java设计模式之解释器模式
定义:解释器模式(Interpreter Pattern),是指给定一个语言(表达式),来表示它的文法,并定义一个解释器,使用该解释器来解释语言中的句子(表达式),并得到结果。例如在编译原理中,一个算术表达式通过词法分析器形成词法单元,而后这些词法单元再通过语法分析器构建成一颗抽象语法分析树。这里的词法分析器和语法分析器都可以看做是解释器优点易于扩展文法。由于在解释器模式中使用类来表示语言的文法规则,因此可以通过继承等机制来扩展文法每一条文法规则都可以表示为一个类,因此可以方便地实现一个简单的语言。原创 2022-09-02 09:10:30 · 504 阅读 · 0 评论 -
Java设计模式之状态模式
定义:状态模式(State Pattern)主要用来解决对象在多种状态转换时,需要对外输出不同的行为的问题。状态和行为是一一对应的,状态之间可以相互转换。当一个对象的内在状态改变时,允许改变其行为。例如手机根据电量的不同,就会有不同的状态,不同的状态手机就会有不同的操作和提示优点代码有很强的可读性。状态模式将每个状态的行为封装到对应的一个类中方便维护,将容易产生问题的if-else语句删除了符合“开闭原则”。容易增删状态缺点:会产生很多类。原创 2022-09-02 09:08:19 · 659 阅读 · 0 评论 -
Java设计模式之责任链模式
定义:为了避免请求发送者与多个请求处理者耦合在一起,于是将所有请求的处理者通过前一对象记住其下一个对象的引用而连成一条链;客户只需要将请求发送到责任链上即可,无须关心请求的处理细节和请求的传递过程,请求会自动进行传递,直到有处理者处理它为止。是对象行为型模式例如公司员工申请一个物品,他只管向他的主管提交申请即可,如果物品金额小于等于1000元,则只需主管审核即可;如果物品金额大于1000但小于等于5000,主管无权审核,主管将申请单转给经理进行审核;......原创 2022-09-01 09:10:59 · 344 阅读 · 0 评论 -
Java设计模式之命令模式
将一个请求封装为一个对象,使发出请求的责任和执行请求的责任分割开。这样两者之间通过命令对象进行沟通,这样方便将命令对象进行储存、传递、调用、增加与管理。原创 2022-09-01 09:07:16 · 201 阅读 · 0 评论 -
Java设计模式之策略模式
定义:该模式定义了一系列算法,并将每个算法封装起来,把算法的实现和使用算法的责任分割开来,使每个算法可以相互替换,且算法的变化不会影响使用算法的客户。策略模式属于对象行为模式。例如去上班可以开车去,也可以坐地铁去,有很多方式优点多重条件语句不易维护,而使用策略模式可以避免使用多重条件语句,如if…else语句、switch…case语句策略模式提供了一系列的可供重用的算法族,恰当使用继承可以把算法族的公共代码转移到父类里面,从而避免重复的代码。...原创 2022-08-31 09:28:05 · 204 阅读 · 0 评论 -
Java设计模式之模板方法模式
定义:在抽象类的一个操作中定义一系列步骤,而将操作的一些步骤在子类中进行实现,这样子类也不会改变该操作及其步骤顺序。它是一种类行为型模式优点它把认为是不变部分的算法封装到父类中实现,而把可变部分算法由子类继承实现,便于子类继续扩展它在父类中提取了公共的部分代码,便于代码复用部分方法是由子类实现的,因此子类可以通过扩展方式增加相应的功能,符合开闭原则缺点对每个不同的实现都需要定义一个子类,这会导致类的个数增加,系统更加庞大。...原创 2022-08-31 09:24:54 · 166 阅读 · 0 评论 -
Java设计模式之组合模式
定义:Composite Pattern,有时又叫作整体-部分(Part-Whole)模式,它是一种将对象组合成树状的层次结构的模式,使用户对单个对象和组合对象具有一致的访问性(对不同数据类型的,需要用接口进行统一)。例如树可以有树叶和树枝,树枝又可以有树叶和树枝;公司有不同的部门,不同的部门有不同的组优点使客户端代码可以一致地处理单个对象和组合对象,无须关心自己处理的是单个对象,还是组合对象更容易在组合体内加入新的对象,客户端不会因为加入了新的对象而更改源代码,满足开闭原则缺点。...原创 2022-08-26 09:17:34 · 247 阅读 · 0 评论 -
Java设计模式之享元模式
定义:通过共享已经存在的对象来大幅度减少创建的对象数量,提高系统资源的利用率。比如数据库连接池,可以对一个数据库连接进行重复使用系统中存在大量相同或相似的对象,这些对象耗费大量的内存资源。大部分的对象可以按照内部状态进行分组,且可将不同部分外部化,这样每一个组只需保存一个内部状态。由于享元模式需要额外维护一个保存享元的数据结构,所以应当在有足够多的享元实例时才值得使用享元模式优点:相同对象只要保存一份,降低了系统中对象的数量缺点。...原创 2022-08-26 09:16:51 · 306 阅读 · 0 评论 -
Java设计模式之外观模式
定义:外观(Facade)模式又叫作门面模式,是一种通过为多个复杂的子系统提供一个统一的接口。客户端不用关心内部子系统的具体细节,内部子系统的改变而不影响客户端。这样会大大降低应用程序的耦合度,提高了程序的可维护性外观模式是迪米特法则的典型应用,优点降低了子系统与客户端之间的耦合度,使得子系统的变化不会影响调用它的客户端对客户屏蔽了子系统组件,减少了客户处理的对象数目,并使得子系统使用起来更加容易降低了大型软件系统中的编译依赖性,因为编译一个子系统不会影响其他的子系统,也不会影响外观对象缺点。原创 2022-08-25 09:26:21 · 256 阅读 · 0 评论 -
Java设计模式之桥接模式
定义:将抽象与实现分离,使它们可以独立变化。用组合关系代替继承关系来实现,从而降低了抽象和实现这两个可变维度的耦合度优点抽象与实现分离,扩展能力强符合开闭原则符合合成复用原则其实现细节对客户透明缺点:由于聚合关系建立在抽象层,要求开发者能识别出各个独立变化维度的抽象层,增加了系统的理解与设计难度适用场景当一个类存在两个独立变化的维度,且这两个维度都需要进行扩展时当一个系统不希望使用继承或因为多层次继承导致系统类的个数急剧增加时。原创 2022-08-25 09:25:22 · 257 阅读 · 0 评论 -
Java设计模式之装饰器模式
定义:指在不改变现有对象结构的情况下,动态地给该对象增加一些额外功能的模式,它属于对象结构型模式优点装饰器是继承的有力补充,比继承灵活,在不改变原有对象的情况下,动态的给一个对象扩展功能,即插即用通过不用装饰类,和使用装饰类的排列组合,可以实现不同效果装饰器模式完全遵守开闭原则缺点装饰器模式会增加许多子类,过度使用会增加程序得复杂性适用场景当需要给一个现有类添加附加功能,而又不能采用生成子类的方法进行扩充时。原创 2022-08-24 09:27:43 · 196 阅读 · 0 评论 -
Java设计模式之适配器模式(类结构型、对象结构型,双向适配器)
定义:适配器将一个类接口转换成另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类能一起工作。适配器模式分为类结构型模式和对象结构型模式两种,前者类之间的耦合度比后者高,所以应用相对较少些优点客户端通过适配器可以透明地调用目标接口可以直接复用现有的适配者类将目标接口和适配者类解耦,解决了目标接口和适配者类接口不一致的问题在很多业务场景中符合开闭原则缺点适配器编写过程需要结合业务场景全面考虑,可能会增加系统的复杂性增加代码阅读难度,降低代码可读性,过多使用适配器会使系统代码变得凌乱。原创 2022-08-24 09:25:40 · 741 阅读 · 0 评论 -
Java设计模式之代理模式(静态、动态)
定义:由于某些原因访问对象(购房者)不能或不想直接和目标对象(开发商)进行访问,需要通过代理(中介)来帮助完成优点代理模式在客户端与目标对象之间起到一个中介作用和保护目标对象的作用代理对象可以扩展目标对象的功能代理模式能将客户端与目标对象分离,在一定程度上降低了系统的耦合度,增加了程序的可扩展性缺点代理模式会造成系统设计中类的数量增加,增加了系统的复杂度在客户端和目标对象之间增加一个代理对象,会造成请求处理速度变慢真实主题每增加一个业务方法,代理主题也必须同步增加一个业务方法。可以使用。原创 2022-08-23 09:24:14 · 629 阅读 · 0 评论 -
Java设计模式之建造者模式
在软件开发过程中有时需要创建一个复杂的对象,这个复杂对象通常由多个部件按一定的步骤组合而成。例如计算机是由CPU、主板、内存、硬盘、显卡、机箱、显示器、键盘、鼠标等部件组装而成的,用户不可能自己去组装计算机,而是将计算机的配置要求告诉计算机销售公司,计算机销售公司安排技术人员去组装计算机,然后再交给要买计算机的用户定义:将一个复杂对象的定义和构造分离,使同样的构建过程可以创建不同的产品,这样的设计模式被称为建造者模式。它是将一个复杂的对象分解为多个简单的对象,然后一步一步构建而成。原创 2022-08-23 09:22:13 · 203 阅读 · 0 评论 -
Java设计模式之抽象工厂模式
工厂方法模式只考虑生产同种类的产品,但是现实生活中许多工厂是综合型的工厂,能生产多种类的产品。如工厂既生成收集有生成电脑抽象工厂模式除了具有工厂方法模式的优点外,其他优点如下可以在工厂类的内部对多个种类产品共同管理,而不必专门引入多个新的工厂类来进行管理当需要产品时,抽象工厂可以保证客户端始终只使用同一个工厂的产品组抽象工厂增强了程序的可扩展性,当增加一个新的工厂时,不需要修改原代码,满足开闭原则缺点:当产品族中需要增加一个新的产品时,所有的工厂类都需要进行修改。违法了“开闭原则”适用场景。原创 2022-08-22 17:12:42 · 313 阅读 · 0 评论 -
Java设计模式之工厂方法模式
定义:简单工厂模式违背了开闭原则,而“工厂方法模式”是对简单工厂模式的进一步抽象化,其好处是可以使系统在不修改原来代码的情况下引进新的产品,即满足开闭原则优点用户只需要知道具体工厂的名称就可得到所要的产品,无须知道产品的具体创建过程灵活性增强,对于新产品的创建,只需多写一个相应的工厂类典型的解耦框架。高层模块只需要知道产品的抽象类,无须关心其他实现类,满足迪米特法则、依赖倒置原则和里氏替换原则缺点类的个数容易过多,增加复杂度增加了系统的抽象性和理解难度。原创 2022-08-22 17:10:51 · 147 阅读 · 0 评论 -
Java设计模式之简单工厂模式(不属于23种设计模式)
什么时候用工厂模式:如果一个类的构造函数有很多参数,然后该类在很多地方被实例化成对象(每个对象实例化的参数不一样)。当需要修改构造函数的参数时,同时需要修改各个实例化的对象,这样会很麻烦所以需要工厂提供统一的实例化对象(对象实例化的参数一样),而调用者只需告诉工厂需要什么即可定义:定义一个创建产品对象的工厂类,这满足“创建与使用相分离”的特点。如果要创建的产品不多,只要一个工厂类就可以完成,这种模式就叫“简单工厂模式”......原创 2022-08-18 14:17:17 · 430 阅读 · 0 评论 -
Java设计模式之原型模式
定义:用一个已经创建的实例对象作为原型,通过复制该原型对象来创建一个和原型对象相同或相似的新对象。避免了重复执行耗时耗资源的new构造函数过程优点Java自带的原型模式(implements Cloneable,然后override clone方法)基于内存二进制流的复制,在性能上比直接new一个对象更加优良缺点需要为类配置一个clone方法clone方法位于类的内部,当对已有类进行改造的时候,需要修改代码,违背了开闭原则。......原创 2022-08-18 14:11:52 · 215 阅读 · 0 评论 -
Java设计模式之单例模式(多例)
指一个类只有一个实例,且该类能以一种模式创建该实例。例如一个公司只能有一个CEO,属于单例模式。原创 2022-08-17 09:27:13 · 1664 阅读 · 0 评论 -
Java设计模式之软件设计七大原则
并不是所有代码都要遵循设计原则,而是要综合考虑人力、时间、成本、质量等,在适当的场景遵循设计原则七大原则的目的是降低对象之间的耦合,增加程序的可复用性、可扩展性和可维护性设计原则归纳目的开闭原则对扩展开放,对修改关闭降低维护带来的新风险里氏替换原则不要破坏继承体系,子类重写方法功能发生改变,不应该影响父类方法的含义防止继承泛滥依赖倒置原则高层不应该依赖低层,要面向接口编程更利于代码结构的升级扩展单一职责原则一个类只干一件事,实现类要单一便于理解,提高代码的可读性。......原创 2022-08-12 09:26:31 · 451 阅读 · 0 评论 -
Java设计模式基本介绍、基本要素、23种设计模式介绍
设计模式共23种,是前辈在使用面向对象设计原则时,对类的封装性、继承性和多态性,以及类的关联关系和组合关系的充分理解,而总结出来的。是解决特定问题的套路,可以提高代码可复用性、可维护性、可读性、稳健性以及安全性设计模式可以根据模式的目的来分类,和根据模式的作用范围来分类根据目的来分类根据模式是用来完成什么工作来划分,可划分如下3 种:创建型模式:用于描述“怎样创建对象”,它的主要特点是“将对象的创建与使用分离”结构型模式:用于描述如何将类或对象按某种布局组成更大的结构。......原创 2022-08-12 09:25:21 · 386 阅读 · 0 评论