
设计模式
文章平均质量分 64
设计模式原则/23种设计模式
CAT_cwds
笨鸟先飞,欢迎大佬指摘文章
展开
-
设计模式实践示例
根据自己掌握的知识出的设计模式题目原创 2023-02-15 16:19:27 · 565 阅读 · 0 评论 -
【设计模式】32.结构型模式-组合模式(Composite)
将对象组合成树状层次结构,使用户对单个对象和组合对象具有一致的访问性。原创 2022-12-06 19:34:35 · 547 阅读 · 0 评论 -
【设计模式】31.结构型模式-享元模式(Flyweight)
通过共享技术来有效地支持大量细粒度对象的复用原创 2022-10-24 09:49:47 · 194 阅读 · 0 评论 -
【设计模式】30.结构型模式-外观(Facade)
为多个复杂的子系统提供一个一致的接口,使这些子系统更加容易被访问。原创 2022-10-14 11:52:11 · 231 阅读 · 0 评论 -
【设计模式】29.结构型模式-装饰模式(Decorator)
装饰模式能够在不改变原来对象结构和功能的前提下,动态的给对象增加新的功能,相比于使用子类扩展的方式,装饰模式更加的灵活。原创 2022-09-29 16:21:13 · 270 阅读 · 0 评论 -
【设计模式】28.结构型模式-桥接(Bridge)
桥接模式原创 2022-09-19 16:59:41 · 466 阅读 · 0 评论 -
【设计模式】27.结构型模式-适配器(Adapter)
将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类能一起工作原创 2022-09-13 15:12:27 · 270 阅读 · 0 评论 -
【设计模式】26.结构型模式-代理模式(Proxy)
代理模式原创 2022-09-06 15:02:11 · 252 阅读 · 0 评论 -
【设计模式】25.行为型模式-解释器(Interpreter)
给定一个语言,定义它的文法的一种标识,并定义一个解释器,这个解释器使用该表示来解释语言中的句子原创 2022-08-31 09:42:13 · 213 阅读 · 0 评论 -
【设计模式】2.设计模式原则-开闭原则
一、原则: 软件实体应当对扩展开放,对修改关闭。当应用的需求改变时,在不修改软件实体的源代码或者二进制代码的前提下,可以扩展模块的功能,使其满足新的需求。二、软件实体包含哪些? 1.项目中划分出的模块 2.类与接口 3.方法三、作用: 1.对软件测试的影响。软件遵守开闭原则的话,软件测试时只需要对扩展的代码进行测试就可以了,因为原有的测试代码仍然能够正常运行。 2....原创 2022-05-23 15:28:00 · 158 阅读 · 0 评论 -
【设计模式】4.设计模式原则-单一职责原则
一、原则: 规定一个类应该有且仅有一个引起它变化的原因,否则类应该被拆分。二、作用: 1.降低类的复杂度。一个类只负责一项职责,其逻辑肯定要比负责多想职责简单得多。 2.提高类的可读性。复杂性降低,自然其可读性会提高 3.提高系统的可维护。 4.变更引起的风险降低。变更是必然的,如果单一职责原则遵守的好,当修改一个功能时,可以显著降低对其他功能的影响。三、实现: 1....原创 2022-06-01 11:28:00 · 276 阅读 · 0 评论 -
【设计模式】1.设计模式介绍
设计模式,即Design Patterns,是指在软件设计中,被反复使用的一种代码设计经验。使用设计模式的目的是为了可重用代码,提高代码的可扩展性和可维护性。可复用性,可维护性,可读性,健壮性,安全性1995年,GoF(Gang of Four,四人帮)合作出版《设计模式:可复用面向对象软件设计的基础》一书,共收录了23种设计模式,从此树立了软件设计模式领域的里程碑,人称【GoF设计模式...原创 2022-05-12 11:45:00 · 154 阅读 · 0 评论 -
【设计模式】5.设计模式原则-依赖倒置原则
一、原则: 高层模块不应该依赖低层模块,两者都应该依赖其抽象。抽象不应该依赖细节,细节应该依赖抽象。面向接口编程,不要面向实现编程。二、作用: 1.可以降低类间的耦合性 2.可以提高系统的稳定性 3.减少并行并发引起的风险 4.提高代码的可读性和可维护性三、实现: 1.通过面向接口的编程来降低类间的耦合 2.每个类尽量提供接口或抽象类,或者两者都具备 3.变量...原创 2022-05-30 15:28:00 · 128 阅读 · 0 评论 -
【设计模式】10.创建型模式-原型模式(Prototype)
一、描述: 将一个对象作为原型,通过对其进行复制而克隆出多个和原型类似的新实例。二、特点: 用一个已经创建的实例作为原型,通过复制该原型对象来创建一个和原型相同或相似的新对象。原型实例指定了要创建的对象的种类。用这种方式创建对象非常高效,根本无须知道对象创建的细节。三、优点: (1)Java自带的原型模式基于内存二进制流的复制,在性能上比直接new一个对象更加优秀。 (2)可...原创 2022-05-24 19:05:00 · 153 阅读 · 0 评论 -
【设计模式】7.设计模式原则-迪米特法则
一、原则: 如果两个软件实体无须直接通信,那么就不应当发生直接的相互调用,可以通过第三方转发该调用。其目的是降低类之间的耦合度,提高模块的相对独立性。二、作用: 1.降低了类之间的耦合度,提高了模块的相对独立性 2.由于亲和度降低,从而提高了类的可复用性和系统的扩展性。 3.过渡使用迪米特法则会使系统产生大量的中介类,从而增加系统的复杂性,使模块之间的通信效率降低。所以,在采用...原创 2022-06-02 10:46:00 · 258 阅读 · 0 评论 -
【设计模式】3.设计模式原则-里式替换原则
一、原则: 继承必须确保超类所拥有的性质在子类中仍然成立。子类可以扩展父类的功能,但不能改变父类原有的功能。子类继承父类时,除添加新的方法完成新增功能外,尽量不要重写父类的方法。二、作用: 1.里式替换原则是实现开闭原则的重要方式之一。 2.它克服了继承中重写父类造成的可复用性变差的缺点。 3.它是动作正确性的保证。即类的扩展不会给已有的系统引入新的错误,降低了代码出错的可能性...原创 2022-05-23 16:19:00 · 136 阅读 · 0 评论 -
【设计模式】18.行为型模式-职责链(Chain of Responsibility)
一、描述: 把请求从链中的一个对象传到下一个对象,直到请求被响应为止。通过这种方式去除对象之间的耦合。避免请求发送者与接收者耦合在一起,让多个对象都有可能接收请求,将这些对象连接成一条链,并且沿着这条链传递请求,直到有对象处理它为止。 角色: 1.抽象处理者角色:定义处理的抽象方法,可以设置具体处理者 2.具体处理者角色:实现抽象处理方法。 (1)每个角色可处理它负责的请求,...原创 2022-07-11 09:53:00 · 154 阅读 · 0 评论 -
【设计模式】9.创建型模式-单例模式(Singleton)
一、描述: 某个类只能生成一个实例,该类提供了一个全局访问点供外部获取该实例,其拓展是有限多例模式。二、特点: 1.单例类只有一个实例对象 2.该单例对象必须由单例类自行创建 3.单例类对外提供一个访问该单例的全局访问点。三、优点: 1.单例模式可以保证内存里只有一个实例,减少了内存的开销。 2.可以避免对自愿的多重占用。 3.单例模式设置全局访问点,可以优化和共...原创 2022-06-07 10:22:00 · 162 阅读 · 0 评论 -
【设计模式】21.行为型模式-中介者(Mediator)
一、描述 定义一个中介对象来简化原有对象之间的交互关系,降低系统中对象间的耦合度,使原有对象之间不必相互了解。 角色: 1.抽象中介类:它是中介者的接口,提供了同事对象注册与转发同事对象信息的抽象方法 2.具体中介类:实现中介者接口,定义一个 List 来管理同事对象,协调各个同事角色之间的交互关系,因此它依赖于同事角色。 3.抽象同事类:定义同事类的接口,保存中介者对象,提...原创 2022-07-25 10:55:00 · 172 阅读 · 0 评论 -
【设计模式】8.设计模式原则-合成复用原则
一、原则: 要求在软件复用时,要尽量先使用组合或者聚合等关联关系来实现,其次才考虑使用继承关系来实现。二、和继承复用的区别 合成复用和继承复用在类的关系有差别,一个是继承,一个是组合关系。我认为在实际使用时,可以根据业务场景来区别使用,这样不会很乱。 继承复用的优缺点: 优点: 1.使用比较方便,可以直接调用父类的属性以及公共方法,不需要额外再建立父类的对象,直接建...原创 2022-06-07 10:21:00 · 549 阅读 · 0 评论 -
【设计模式】19.行为型模式-状态(State)
一、描述 允许一个对象在其内部状态发生改变时改变其行为能力。对象的行为依赖于它的状态,并且可以根据它的状态改变而改变它的相关行为。每个状态通过持有Contetxt的引用,来实现状态转移。 一个对象的状态改变了,那么他的操作也会随之改变。 角色: 1.使用环境角色(Context):根据不同的状态在相同方法下作出不同行为的类。 2.抽象状态类(AbstractState):定义...原创 2022-07-15 09:36:00 · 149 阅读 · 0 评论 -
【设计模式】16.行为型模式-策略(Strategy)
一、描述 定义了一系列算法,并将每个算法封装起来,使它们可以相互替换,且算法的改变不会影响使用算法的客户。 1.角色 (1)抽象类:定义算法方法。 (2)具体实现类:继承抽象类,实现算法方法。 2.类图二、以快速排序算法、合并排序算法为例,类图很简单,和上面的类图差不多,所以就不画了。直接上代码: 1.抽象计算类public interface Calc...原创 2022-06-28 15:49:00 · 154 阅读 · 0 评论 -
【设计模式】24.行为型模式-备忘录(Memento)
一、描述 定义:在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样可以在以后将对象恢复至原来保存的状态。 理解:当需要保存某个对象的操作数据或者该对象状态时,使用另外一个类记录原始对象的数据以及状态,以便回退到以前的某种数据。 角色: 1.Originator(原发器):定义原始类的数据以及状态信息,包含创建备忘录的方法。 2.Memonto(备忘...原创 2022-08-22 18:05:00 · 188 阅读 · 0 评论 -
【设计模式】20.行为型模式-观察者(Observer)
一、描述 定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。也称为发布-订阅模式。 角色: 1.抽象目标类:除自身业务逻辑外,包含增加、删除、唤醒观察者功能。 2.具体目标类:为那些在目标发生改变时需获取通知的对象定义一个更新接口。 2.抽象观察类:定义响应抽象方法。 3.具体观察类:继承抽象观察类,实现抽象方法。 ...原创 2022-07-20 17:34:00 · 221 阅读 · 0 评论 -
【设计模式】17.行为型模式-命令(Command)
一、描述 将一个请求封装为一个对象,使请求者和接收者分离开来,实现解耦。可以提供命令的撤销和恢复功能。 角色: 1.请求者:发出请求,调用命令。 2.抽象命令类:定义抽象接口。 3.具体命令类:实现抽象命令类中的抽象接口,将命令发送给接收者。 4.接收者:接收命令,并且做出相关操作。 类图:二、优点 1.将请求者与接收者解耦,降低耦合度。请求者不需要知道接受...原创 2022-07-04 10:33:00 · 158 阅读 · 0 评论 -
【设计模式】13.创建型模式-抽象工厂(AbstractFactory)
一、描述 提供一个创建产品族的接口,其每个子类可以生产一系列相关的产品。不同于工厂方法模式,工厂方法模式的工厂只能生产一种产品。 抽象工厂的角色分类: 1.抽象产品:定义产品的使用方法。 2.具体产品:实现抽象产品,定义了该种产品的具体使用方法。 3.抽象工厂:定义生产产品的功能。 4.具体工厂:实现抽象工厂,可以生产一系列产品。 类图:二、优点...原创 2022-06-22 09:38:00 · 166 阅读 · 0 评论 -
【设计模式】22.行为型模式-迭代器(Iterator)
一、描述 提供一种方法来访问聚合对象,而不暴露这个对象的内部表示,其别名为游标。聚合对象提供数据以及数据访问功能,若聚合对象变化的话,数据访问也要同步修改,不符合开闭原则。在客户访问和聚合对象之间插入迭代器,实现解耦。迭代器模式可以为不同的容器提供一致的遍历行为,而不用关心容器内容元素组成结构 角色: 1.抽象聚合类:定义一系列组成聚合对象的方法,并且定义创建抽象类的方法 2...原创 2022-08-01 09:51:00 · 155 阅读 · 0 评论 -
【设计模式】12.创建型模式-工厂方法(Factory Method)
一、描述 定义一个用于创建产品的接口,由子类工厂决定生产什么产品。解决了简单工厂模式破坏开闭原则的弊端 工厂方法模式的角色包含: 1.抽象工厂:构造了一个生产产品的接口方法。 2.具体工厂:指定生产某种产品,实现了抽象工厂的接口方法。 3.抽象产品:定义了一系列产品的通用使用方法。 4.具体产品:某一种产品的具体使用方法。 工厂方法的类图: 二...原创 2022-06-14 09:51:00 · 122 阅读 · 0 评论 -
【设计模式】14.创建型模式-建造者(Builder)
一、描述 是将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。在用户不知道对象的建造过程和细节的情况下就可以直接创建复杂的对象。建造者模式按顺序创建复杂对象(把内部的建造过程和细节隐藏起来)。 角色包含以下分类: 产品(Product):产品以及其包含的属性。 抽象建造者(AbstractBuilder):包含产品实体、建造产品属性的抽象方法、返...原创 2022-06-22 09:38:00 · 183 阅读 · 0 评论 -
【设计模式】15.行为型模式-模板方法(TemplateMethod)
一、描述 定义一个操作中的算法的骨架,而将一些步骤延迟到子类中,使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。 角色: 1.抽象模板类:负责定义算法方法 2.具体模板类:实现抽象模板类方法 类图: 二、优点 1.封装不变部分,扩展可变部分 2.提取公共代码,便于维护 3.行为由父类控制,子类实现三、缺点 1.每一个不同的实现都需要一...原创 2022-06-28 15:49:00 · 165 阅读 · 0 评论 -
【设计模式】23.行为型模式-访问者(Visitor)
一、描述 访问者模式是一种将数据结构与数据操作分离开来的行为模式。每个访问者标识一个作用于某对象结构中各元素的操作,它可以使你在不改变各元素的类的前提下定义作用于这些元素的新操作。 角色: 1.结构类:包含元素类,添加访问者类。 2.抽象元素类:定义接收访问者访问的抽象方法。 3.具体元素类:调用访问者访问当前元素的方法 4.抽象访问者类:为对象结构中的具体元素类定义一种...原创 2022-08-08 10:19:00 · 213 阅读 · 0 评论 -
【设计模式】11.创建型模式-简单工厂模式(Simple Factory)
在工厂模式的大类中,具体有三个小的子类模式,包含简单工厂模式、工厂方法模式、抽象工厂模式。其中简单工厂模式并没有放到23种设计模式中,但是对于理解另外两种设计模式有重要作用。这篇文章中,主要介绍一下简单工厂模式:一、描述 简单工厂模式有一个具体的工厂类,可以生成多个不同的产品。 该模式的使用场景为:如果用户需要使用一个产品,首先要创建这个产品,之后再使用该产品。但是用户并不关心产品的构...原创 2022-06-13 09:52:00 · 175 阅读 · 0 评论 -
【设计模式】6.设计模式原则-接口隔离原则
一、原则: 一个类对另一个类的依赖应该建立在最小的接口上。要为各个类建立它们需要的专用接口,而不要试图去建立一个很庞大的接口供所有依赖它的类去调用。二、作用: 1.将臃肿庞大的接口分解为多个粒度小的接口,可以预防外来变更的扩散,提高系统的灵活性和可维护性。 2.接口隔离提高系统的内聚性,减少了对外交互,降低了系统的耦合性。 3.如果接口的粒度大小定义合理,能够保证系统的稳定性;...原创 2022-06-02 10:46:00 · 223 阅读 · 0 评论