设计模式
文章平均质量分 55
设计模式
keeper42
Just do one thing and do it well! 要么别做,要做就做到最好!
展开
-
【设计模式】装饰器模式
学习于菜鸟课堂与极客时间意图:动态地给一个对象添加一些额外的职责。就增加功能来说,装饰器模式相比生成子类更为灵活。主要解决:一般的,我们为了扩展一个类经常使用继承方式实现,由于继承为类引入静态特征,并且随着扩展功能的增多,子类会很膨胀。优点:装饰类和被装饰类可以独立发展,不会相互耦合,装饰模式是继承的一个替代模式,装饰模式可以动态扩展一个实现类的功能。缺点:多层装饰比较复杂。使用场景:1、扩展一个类的功能。 2、动态增加功能,动态撤销。JDK中,InputStream 是一个抽.原创 2022-03-10 17:40:16 · 70 阅读 · 0 评论 -
【设计原则】迪米特法则(LOD)——最少知道原则
迪米特法则的英文翻译是:Law of Demeter,缩写是 LOD。它还有另外一个更加达意的名字,叫作最小知识原则,英文翻译为:The Least Knowledge Principle。简言之,不该有直接依赖关系的类之间,不要有依赖;有依赖关系的类之间,尽量只依赖必要的接口。迪米特法则是希望减少类之间的耦合,让类越独立越好。每个类都应该少了解系统的其他部分。一旦发生变化,需要了解这一变化的类就会比较少。很多设计原则都以实现代码的“高内聚、松耦合”为目的,比如单一职责原则、基于接口而非实现编程原创 2022-03-13 09:53:06 · 432 阅读 · 0 评论 -
【设计原则】DRY原则
DRY原则DRY:Don’t Repeat Yourself,不要重复你自己。三种典型的代码重复情况,它们分别是:实现逻辑重复、功能语义重复和代码执行重复。这三种代码重复,有的看似违反 DRY,实际上并不违反;有的看似不违反,实际上却违反了。代码复用性减少代码耦合满足单一职责原则模块化业务与非业务逻辑分离通用代码下沉继承、多态、抽象、封装应用模板等设计模式实际上,除了上面讲到的这些方法之外,复用意识也非常重要。在设计每个模块、类、函数的时候,要像设计一个外部 AP原创 2022-03-13 09:44:57 · 117 阅读 · 0 评论 -
【设计原则】KISS原则与YAGNI原则
KISS,Keep It Short and Simple.KISS 原则是保持代码可读和可维护的重要手段。KISS 原则中的“简单”并不是以代码行数来考量的。代码行数越少并不代表代码越简单,我们还要考虑逻辑复杂度、实现难度、代码的可读性等。而且,本身就复杂的问题,用复杂的方法解决,并不违背 KISS 原则。除此之外,同样的代码,在某个业务场景下满足 KISS 原则,换一个应用场景可能就不满足了。如何写出满足 KISS 原则的代码?(1)不要使用同事可能不懂的技术来实现代码。比如前面例子中的正则原创 2022-03-13 09:34:49 · 222 阅读 · 0 评论 -
【设计原则】里氏替换原则
里式替换原则:Liskov Substitution Principle,缩写为 LSP。子类对象(object of subtype/derived class)能够替换程序(program)中父类对象(object of base/parent class)出现的任何地方,并且保证原来程序的逻辑行为(behavior)不变及正确性不被破坏。多态和里式替换有点类似,但它们关注的角度是不一样的。多态是面向对象编程的一大特性,也是面向对象编程语言的一种语法。它是一种代码实现的思路。而里式替换是一种设计原创 2022-03-13 09:25:53 · 153 阅读 · 0 评论 -
【设计原则】控制反转、依赖注入与依赖反转原则(DIP)
控制反转控制反转(Inversion Of Control,IOC),“控制”指的是对程序执行流程的控制,而“反转”指的是在没有使用框架之前,程序员自己控制整个程序的执行。在使用框架之后,整个程序的执行流程可以通过框架来控制。流程的控制权从程序员“反转”到了框架。实际上,实现控制反转的方法有很多,除了刚才例子中所示的类似于模板设计模式的方法之外,还有马上要讲到的依赖注入等方法,所以,控制反转并不是一种具体的实现技巧,而是一个比较笼统的设计思想,一般用来指导框架层面的设计。public cla原创 2022-03-13 09:01:04 · 276 阅读 · 0 评论 -
【设计原则】接口隔离原则
接口隔离原则的英文翻译是“ Interface Segregation Principle”,缩写为 ISP。Robert Martin 在 SOLID 原则中是这样定义它的:“Clients should not be forced to depend upon interfaces that they do not use。”直译成中文的话就是:客户端不应该被强迫依赖它不需要的接口。其中的“客户端”,可以理解为接口的调用者或者使用者。接口隔离原则跟单一职责原则有点类似,不过稍微还是有点区别。单一职责原创 2022-03-13 08:01:20 · 117 阅读 · 0 评论 -
【设计原则】开闭原则(对扩展开放、对修改关闭)
开闭原则的英文全称是 Open Closed Principle,简写为 OCP。它的英文描述是:software entities (modules, classes, functions, etc.) should be open for extension , but closed for modification。即:软件实体(模块、类、方法等)应该“对扩展开放、对修改关闭”。添加一个新的功能应该是,在已有代码基础上扩展代码(新增模块、类、方法等),而非修改已有代码(修改模块、类、方法等)。下面原创 2022-03-13 07:18:33 · 761 阅读 · 0 评论 -
【设计原则】单一职责原则
学习于极客时间-设计模式SOLID 原则SOLID 原则:SRP单一职责原则(the single responsibility principle )、OCP开闭原则(the open closed principle)、LSP里氏替换原则(the liskov substitution principle)、ISP接口独立原则(the interface segregation principle)、DIP依赖倒置原则(the dependency inversion principle)。原创 2022-03-13 07:02:49 · 127 阅读 · 0 评论 -
【设计模式】单例模式(2)——不推荐使用单例模式
学习于极客时间-设计模式单例存在哪些问题?大部分情况下,我们在项目中使用单例,都是用它来表示一些全局唯一类,比如配置信息类、连接池类、ID 生成器类。单例模式书写简洁、使用方便,在代码中,我们不需要创建对象,直接通过类似 IdGenerator.getInstance().getId() 这样的方法来调用就可以了。但是,这种使用方法有点类似硬编码(hard code),会带来诸多问题。1. 单例对 OOP 特性的支持不友好我们知道,OOP 的四大特性是封装、抽象、继承、多态。单例这种原创 2022-03-12 22:24:57 · 233 阅读 · 0 评论 -
【设计模式】工厂模式(2)
工厂模式原创 2022-03-12 18:29:30 · 59 阅读 · 0 评论 -
【设计模式】原型模式
【设计模式】原型模式原创 2022-03-12 12:27:53 · 72 阅读 · 0 评论 -
【设计模式】适配器模式与桥接模式
适配器模式与桥接模式原创 2022-03-11 06:47:49 · 136 阅读 · 0 评论 -
【设计模式】组合模式
学习于组合模式 | 菜鸟教程意图:将对象组合成树形结构以表示"部分-整体"的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。主要解决:它在我们树型结构的问题中,模糊了简单元素和复杂元素的概念,客户程序可以像处理简单元素一样来处理复杂元素,从而使得客户程序与复杂元素的内部结构解耦。优点: 1、高层模块调用简单。 2、节点自由增加。缺点:在使用组合模式时,其叶子和树枝的声明都是实现类,而不是接口,违反了依赖倒置原则。使用场景:部分、整体场景,如树形菜单,文件、文件夹的管理。.原创 2022-03-09 15:34:09 · 97 阅读 · 0 评论 -
【设计模式】单例模式(1)
【设计模式】单例模式原创 2022-03-06 23:59:33 · 72 阅读 · 0 评论 -
【设计模式】建造者模式
【设计模式】模板方法模式原创 2022-03-06 23:58:55 · 100 阅读 · 0 评论 -
【设计模式】工厂模式(1)
【设计模式】工厂模式原创 2022-03-06 23:58:15 · 69 阅读 · 0 评论 -
【设计模式】门面模式(应用场景)
【设计模式】门面模式(应用场景)原创 2022-02-27 21:07:09 · 193 阅读 · 0 评论 -
【设计模式】代理模式
【设计模式】代理模式原创 2022-02-27 11:40:42 · 233 阅读 · 0 评论 -
【设计模式】迭代器模式
【设计模式】迭代器模式迭代器模式将集合对象的遍历操作从集合类中拆分出来,放到迭代器类中,让两者的职责更加单一。迭代器是用来遍历容器的,所以,一个完整的迭代器模式一般会涉及容器和容器迭代器两部分内容。为了达到基于接口而非实现编程的目的,容器又包含容器接口、容器实现类,迭代器又包含迭代器接口、迭代器实现类。对于迭代器模式,它的类图如下:...原创 2022-02-27 11:16:50 · 361 阅读 · 0 评论 -
【设计模式】中介模式
【设计模式】中介模式原创 2022-02-20 09:10:23 · 103 阅读 · 0 评论 -
【设计模式】解释器模式
【设计模式】解释器模式原创 2022-02-20 09:09:44 · 176 阅读 · 0 评论 -
【设计模式】命令模式
【设计模式】命令模式原创 2022-02-20 09:08:50 · 188 阅读 · 0 评论 -
【设计模式】备忘录模式
【设计模式】备忘录模式原创 2022-02-20 09:08:19 · 320 阅读 · 0 评论 -
【设计模式】访问者模式
【设计模式】访问者模式原创 2022-02-20 09:06:33 · 266 阅读 · 0 评论 -
【设计模式】迭代器模式
【设计模式】迭代器模式原创 2022-02-20 09:05:45 · 326 阅读 · 0 评论 -
【设计模式】状态模式(状态机)
先介绍下状态机,状态机一般由三部分组成:状态(State)、事件(Event)、动作(Action)。其中,事件也称为转移条件(Transition Condition)。事件 触发 状态的转移及动作的执行。不过,动作不是必须的,可能只转移状态,不执行任何动作。状态模式通过将事件触发的状态转移和动作执行,拆分到不同的状态类中,来避免分支判断逻辑。下面展示“超级马里奥”小游戏的游戏状态之间的状态转换,public interface IMario { State getName(); vo原创 2022-02-12 11:43:57 · 1845 阅读 · 0 评论 -
【设计模式】责任链模式
责任链模式原创 2022-02-12 11:26:11 · 145 阅读 · 0 评论 -
【设计模式】策略模式
策略模式,可以使算法的变化独立于使用它们业务代码,在实际项目开发中,常利用它来避免冗长的 if-else 分支判断,或者提供扩展点等。优点:1、算法可以自由切换。 2、避免使用多重条件判断。 3、扩展性良好。缺点: 1、策略类会膨胀。 2、所有策略类都需要对外暴露。注意事项:如果一个系统的策略多于四个,就需要考虑使用混合模式,解决策略类膨胀的问题。实现类代码示例首先创建策略接口public interface Strategy { public int oper.原创 2022-02-12 11:19:50 · 770 阅读 · 0 评论 -
【设计模式】模板方法模式
模板方法模式在一个方法中定义一个算法骨架,并将某些步骤推迟到子类中实现。模板方法模式可以让子类在不改变算法整体结构的情况下,重新定义算法中的某些步骤。优点: 1、封装不变部分,扩展可变部分。 2、提取公共代码,便于维护。 3、行为由父类控制,子类实现。缺点:每一个不同的实现都需要一个子类来实现,导致类的个数增加,使得系统更加庞大。使用场景: 1、有多个子类共有的方法,且逻辑相同。 2、复杂的、重复的方法,可以考虑作为模板方法。注意事项:为防止恶意操作,一般模板方法都加上 final 关键词。原创 2022-02-12 10:42:42 · 63 阅读 · 0 评论 -
【设计模式】观察者模式
观察者模式(Observer Design Pattern)也被称为发布-订阅模式(Publish-Subscribe Design Pattern),它主要解决的问题是:在对象之间定义一个一对多的依赖,当一个对象状态改变的时候,所有依赖的对象都要自动收到通知。优点:观察者和被观察者之间是耦合的;缺点:1、如果一个被观察者对象有很多的直接和间接的观察者的话,将所有的观察者都通知到会花费很多时间。2、如果在观察者和观察目标之间有循环依赖的话,观察目标会触发它们之间进行循环调用,可能导致系统崩溃原创 2022-02-12 09:46:18 · 370 阅读 · 0 评论 -
【设计模式】适配器模式与桥接模式
适配器模式(Adapter Pattern)是作为两个不兼容的接口之间的桥梁。这种类型的设计模式属于结构型模式,它结合了两个独立接口的或不兼容的功能。桥接模式(Bridge Pattern)优缺点:优点1、分离抽象接口及其实现部分。提高了比继承更好的解决方案。2、桥接模式提高了系统的可扩充性,在两个变化维度中任意扩展一个维度,都不需要修改原有系统。3、实现细节对客户透明,可以对用户隐藏实现细节。缺点1、桥接模式的引入会增加系统的理解与设计难度,由于聚合关联关系建立在抽象层,要求开原创 2021-08-18 11:49:41 · 492 阅读 · 0 评论 -
【设计模式】 建造者模式与工厂模式的区别
一、建造者模式是将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。二、建造者模式与工厂模式的区别:工厂模式一般都是创建一个产品,注重的是把这个产品创建出来就行,只要创建出来,不关心这个产品的组成部分。从代码上看,工厂模式就是一个方法,用这个方法就能生产出产品。建造者模式也是创建一个产品,但是不仅要把这个产品创建出来,还要关系这个产品的组成细节,组成过程。从代码上看,建造者模式在建造产品时,这个产品有很多方法,建造者模式会根据这些相同方法但是不同执行顺序建造出不同组成细节的产品。原创 2021-08-17 17:47:14 · 938 阅读 · 0 评论 -
【设计模式】工厂模式
工厂模式是一种创建型模式,根据抽象程度可分为工厂方法模式和抽象工厂模式。实现接口public interface Button {} public interface Border {} 实现抽象类public class WinButton implements Button {} public class WinBorder implements Border {} public class MacButton implements Button {} public class原创 2021-08-02 08:45:42 · 57 阅读 · 0 评论 -
【设计模式】Facade外观模式
介绍外观模式之前,首先让我们来看下面的例子:假设我们现有一个对外接口FacadeService,里面有一个对外的方法a();public interface FacadeService { public void a();//这个方法是给外部调用的}他有一个实现类FacadeServiceImpl,他实现了FacadeService接口的a方法,同时又新增了一个自己的供内部调用的方法b;public class FacadeServiceImpl implements Faca..原创 2020-06-11 15:48:52 · 215 阅读 · 0 评论 -
【设计模式】责任链模式
一、责任链模式介绍责任链模式:将能够处理同一类请求的对象连成一条链,使这些对象都有机会处理请求,所提交的请求沿着链传递。从而避免请求的发送者和接受者之间的耦合关系。链上的对象逐个判断是否有能力处理该请求,如果能则就处理,如果不能,则传给链上的下一个对象。直到有一个对象处理它为止。场景:1、打牌时,轮流出牌2、接力赛跑3、请假审批4、公文审批责任链UML图:Handler:表示处理请求的接口,在这个接口里可以定义链上的下一个继承者,和一个处理请求的抽象方法。Co原创 2020-12-31 11:21:13 · 129 阅读 · 0 评论 -
【设计模式】详解设计模式在Spring中的应用
spring中常用的设计模式达到九种,一一举例:第一种:简单工厂又叫做静态工厂方法(StaticFactory Method)模式,但不属于23种GOF设计模式之一。简单工厂模式的实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类。spring中的BeanFactory就是简单工厂模式的体现,根据传入一个唯一的标识来获得bean对象,但是否是在传入参数后创建还是传入参数前创建这个要根据具体情况来定。如下配置,就是在 HelloItxxz 类中创建一个 itxxzBean。<b..原创 2021-01-28 17:47:42 · 255 阅读 · 0 评论 -
【设计模式】Java的三种代理模式简述
本文着重讲述三种代理模式在java代码中如何写出,为保证文章的针对性,暂且不讨论底层实现原理,具体的原理将在下一篇文章中讲述。代理模式是什么代理模式是一种设计模式,简单说即是在不改变源码的情况下,实现对目标对象的功能扩展。比如有个歌手对象叫Singer,这个对象有一个唱歌方法叫sing()。假如你希望,通过你的某种方式生产出来的歌手对象,在唱歌前后还要想观众问好和答谢,也即对目标对象Singer的sing方法进行功能扩展。但是往往你又不能直接对源代码进行修改,可能是你希望原来的对原创 2021-01-28 17:01:47 · 185 阅读 · 0 评论 -
【设计模式】JAVA设计模式之模板方法模式
定义一个操作中算法的框架,而将一些步骤延迟到子类中。模板方法模式使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。场景:在现实生活中,很多事情都包含几个实现步骤,例如请客吃饭,无论吃什么,一般都包含点单、吃东西、买单等几个步骤,通常情况下这几个步骤的次序是:点单 --> 吃东西 --> 买单。在这三个步骤中,点单和买单大同小异,最大的区别在于第二步——吃什么?吃面条和吃满汉全席可大不相同下面通过计算器这一案例代码实现模板方法模式的使用,将‘计算’这一动作当作是一个模板动作,原创 2021-01-28 17:00:36 · 131 阅读 · 1 评论 -
【设计原则】五大原则 SRP OCP LSP DIP ISP
https://blog.csdn.net/qq_16234613/article/details/54933742SRP单一职责原则(Single Responsibility Principle): 就一个类而言,应该仅有一个引起它变化的原因。OCP开放-封闭原则(Open Closure Principle): 软件实体(类,模块,函数等)应该可以扩展的,但不可修改。...原创 2020-01-21 11:37:01 · 749 阅读 · 0 评论