设计模式
柯南二号
一个喜欢探讨Java后端技术的小白
展开
-
面向对象的七大设计原则
面向对象七大设计原则文章目录面向对象七大设计原则1、单一职责原则2、开闭原则(Open Close Principle)3、里氏代换原则(Liskov Substitution Principle)4、依赖倒转原则(Dependence Inversion Principle)5、接口隔离原则(Interface Segregation Principle)6、迪米特法则,又称最少知道原则(Demeter Principle)7、合成复用原则(Composite Reuse Principle)1、单一原创 2020-08-02 22:20:51 · 246 阅读 · 0 评论 -
Java代码设计模式讲解二十三种设计模式
设计模式文章目录设计模式一、创造型设计模式1.1 单例模式1.1.1 饿汉式单例模式1.1.2 懒汉式单例模式(1)线程不安全的情况(2)线程安全的情况1. 实例化的方法上加synchronized同步锁2. 双检锁/双重校验锁(DCL,即 double-checked locking)3. 登记式/静态内部类4. 效率很高且线程安全的实现方式1.1.3 枚举单例模式小结1.2 工厂模式1.2.1 简单工厂模式(1)概念(2)适用场景(3)代码示例(4)模式在源码中的体现(5)简单工厂模式的优缺点1.2.原创 2020-08-02 19:01:23 · 3077 阅读 · 0 评论 -
设计模式之享元模式
享元模式示例代码git地址:https://gitee.com/zyxscuec/Design-pattern.git文章目录享元模式(1)概念(2)适用场景(3)代码示例(4)该模式在源码中的体现(5)享元模式的优缺点(1)概念享元模式(Flyweight Pattern)主要用于减少创建对象的数量,以减少内存占用和提高性能。这种类型的设计模式属于结构型模式,它提供了减少对象数量从而改善应用所需的对象结构的方式。享元模式尝试重用现有的同类对象,如果未找到匹配的对象,则创建新对象。**主要解决:原创 2020-08-02 18:57:24 · 111 阅读 · 0 评论 -
设计模式之外观模式 附Java示例解析
外观模式示例代码git地址:https://gitee.com/zyxscuec/Design-pattern.git文章目录外观模式(1)概念(2)适用场景(3)代码示例(4)该模式在源码中的体现(5)外观模式的优缺点(1)概念外观模式(Facade Pattern)隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口。这种类型的设计模式属于结构型模式,它向现有的系统添加一个接口,来隐藏系统的复杂性。这种模式涉及到一个单一的类,该类提供了客户端请求的简化方法和对现有系统类方法的委托调用原创 2020-08-02 18:35:40 · 407 阅读 · 0 评论 -
设计模式之组合模式 附JDK ArrayList中的设计模式应用
组合模式示例代码git地址:https://gitee.com/zyxscuec/Design-pattern.git文章目录组合模式(1)概念(2)适用场景(3)代码示例(4)该模式在源码中的体现(5)组合模式的优缺点(1)概念组合模式(Composite Pattern),又叫部分整体模式,是用于把一组相似的对象当作一个单一的对象。组合模式依据树形结构来组合对象,用来表示部分以及整体层次。这种类型的设计模式属于结构型模式,它创建了对象组的树形结构。这种模式创建了一个包含自己对象组的类。该类提供原创 2020-08-02 18:08:56 · 382 阅读 · 0 评论 -
设计模式之桥接模式 附JDBC的源码应用解析
桥接模式示例代码git地址:https://gitee.com/zyxscuec/Design-pattern.git文章目录桥接模式(1)概念(2)适用场景(3)代码示例(4)该模式在源码中的体现(5)桥接模式的优缺点(1)概念桥接(Bridge)是用于把抽象化与实现化解耦,使得二者可以独立变化。这种类型的设计模式属于结构型模式,它通过提供抽象化和实现化之间的桥接结构,来实现二者的解耦。这种模式涉及到一个作为桥接的接口,使得实体类的功能独立于接口实现类。这两种类型的类可被结构化改变而互不影响。原创 2020-08-02 17:57:18 · 657 阅读 · 0 评论 -
设计模式之访问者模式
访问者模式示例代码git地址:https://gitee.com/zyxscuec/Design-pattern.git文章目录访问者模式(1)概念(2)适用场景(3)代码示例(4)该模式在源码中的体现(5)访问者模式的优缺点(1)概念在访问者模式(Visitor Pattern)中,我们使用了一个访问者类,它改变了元素类的执行算法。通过这种方式,元素的执行算法可以随着访问者改变而改变。这种类型的设计模式属于行为型模式。根据模式,元素对象已接受访问者对象,这样访问者对象就可以处理元素对象上的操作。原创 2020-08-02 09:30:10 · 159 阅读 · 0 评论 -
设计模式之空对象模式详解 附Java源码实例
空对象模式示例代码git地址:https://gitee.com/zyxscuec/Design-pattern.git文章目录空对象模式(1)概念(2)适用场景(3)代码示例(4)该模式在源码中的体现(5)空对象模式的优缺点(1)概念在空对象模式(Null Object Pattern)中,一个空对象取代 NULL 对象实例的检查。Null 对象不是检查空值,而是反应一个不做任何动作的关系。这样的 Null 对象也可以在数据不可用的时候提供默认的行为。在空对象模式中,我们创建一个指定各种要执行的原创 2020-08-02 08:44:54 · 306 阅读 · 0 评论 -
设计模式之状态模式
状态模式示例代码git地址:https://gitee.com/zyxscuec/Design-pattern.git文章目录状态模式(1)概念(2)适用场景(3)代码示例(4)该模式在源码中的体现(5)状态模式的优缺点(6) 与策略模式的比较(1)概念在状态模式(State Pattern)中,类的行为是基于它的状态改变的。这种类型的设计模式属于行为型模式。在状态模式中,我们创建表示各种状态的对象和一个行为随着状态对象改变而改变的 context 对象。主要解决:对象的行为依赖于它的状态(属性原创 2020-08-02 08:07:25 · 174 阅读 · 0 评论 -
设计模式之备忘录模式
备忘录模式示例代码git地址:https://gitee.com/zyxscuec/Design-pattern.git文章目录备忘录模式(1)概念(2)适用场景(3)代码示例(4)该模式在源码中的体现(5)备忘录模式的优缺点(1)概念备忘录模式(Memento Pattern)保存一个对象的某个状态,以便在适当的时候恢复对象。备忘录模式属于行为型模式。(2)适用场景1、需要保存/恢复数据的相关状态场景。2、提供一个可回滚的操作。注意事项:1、为了符合迪米特原则,还要增加一个管理备忘录的类原创 2020-08-01 23:14:29 · 162 阅读 · 0 评论 -
设计模式之中介者模式
中介者模式示例代码git地址:https://gitee.com/zyxscuec/Design-pattern.git文章目录中介者模式(1)概念(2)适用场景(3)代码示例(4)该模式在源码中的体现(5)中介者模式的优缺点(1)概念中介者模式(Mediator Pattern)是用来降低多个对象和类之间的通信复杂性。这种模式提供了一个中介类,该类通常处理不同类之间的通信,并支持松耦合,使代码易于维护。中介者模式属于行为型模式。图片来源:https://blog.csdn.net/Zixiang原创 2020-08-01 22:17:20 · 182 阅读 · 0 评论 -
设计模式之迭代器模式
迭代器模式文章目录迭代器模式(1)概念(2)适用场景(3)代码示例(4)该模式在源码中的体现(5)迭代器模式的优缺点(1)概念迭代器模式(Iterator Pattern)是 Java 和 .Net 编程环境中非常常用的设计模式。这种模式用于顺序访问集合对象的元素,不需要知道集合对象的底层表示。迭代器模式属于行为型模式。(2)适用场景1、访问一个聚合对象的内容而无须暴露它的内部表示。2、需要为聚合对象提供多种遍历方式。3、为遍历不同的聚合结构提供一个统一的接口。(3)代码示例我们将创建一原创 2020-08-01 21:33:01 · 228 阅读 · 0 评论 -
设计模式之 解释器模式 Java实例代码演示
解释器模式示例代码git地址 : https://gitee.com/zyxscuec/Design-pattern.git文章目录解释器模式(1)概念(2)适用场景(3)代码示例(4)该模式在源码中的体现(5)解释器模式的优缺点(1)概念解释器模式(Interpreter Pattern)提供了评估语言的语法或表达式的方式,它属于行为型模式。这种模式实现了一个表达式接口,该接口解释一个特定的上下文。这种模式被用在 SQL 解析、符号处理引擎等。**何时使用:**如果一种特定类型的问题发生的频率足原创 2020-08-01 10:35:24 · 342 阅读 · 0 评论 -
设计模式之命令模式 Java实例讲解 + 线程池中的应用场景
2.2 命令模式示例代码git地址 : https://gitee.com/zyxscuec/Design-pattern.git文章目录2.2 命令模式(1)概念(2)适用场景(3)代码示例(4)该模式在源码中的应用(5)命令模式的优缺点(1)概念命令模式(Command Pattern)是一种数据驱动的设计模式,它属于行为型模式。请求以命令的形式包裹在对象中,并传给调用对象。调用对象寻找可以处理该命令的合适的对象,并把该命令传给相应的对象,该对象执行命令。主要解决:在软件系统中,行为请求者与行原创 2020-08-01 09:31:07 · 690 阅读 · 0 评论 -
设计模式之责任链模式 Java实例代码 + Tomcat责任链模式应用+安卓责任链模式应用
2.1 责任链模式示例代码git地址:https://gitee.com/zyxscuec/Design-pattern.git文章目录2.1 责任链模式(1)概念(2)适用场景(3)代码示例(4)该模式在源码中的体现责任链模式在Tomcat中的应用责任链模式在 Android 中的体现ViewGroup 事件传递有序广播(5)责任链模式的优缺点(1)概念顾名思义,责任链模式(Chain of Responsibility Pattern)为请求创建了一个接收者对象的链。这种模式给予请求的类型,对请原创 2020-07-31 22:53:35 · 241 阅读 · 0 评论 -
设计模式之对象池模式
对象池模式(1) 概念Object Pool,即对象池,对象被预先创建并初始化后放入对象池中,对象提供者就能利用已有的对象来处理请求,减少对象频繁创建所占用的内存空间和初始化时间,例如数据库连接对象基本上都是创建后就被放入连接池中,后续的查询请求使用的是连接池中的对象,从而加快了查询速度。类似被放入对象池中的对象还包括Socket对象、线程对象和绘图对象(GDI对象)等。在Object Pool设计模式中,主要有两个参与者:对象池的管理者和对象池的用户,用户从管理者那里获取对象,对象池对于用户来讲是透原创 2020-07-31 21:32:15 · 626 阅读 · 0 评论 -
设计模式之原型模式
1.4 原型模式代码地址:https://gitee.com/zyxscuec/Design-pattern.git文章目录1.4 原型模式(1)概念(2)适用场景(3)代码示例(4)该模式在源码中的体现(5)原型模式的优缺点(1)概念原型模式(Prototype Pattern)是用于创建重复的对象,同时又能保证性能。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。这种模式是实现了一个原型接口,该接口用于创建当前对象的克隆。当直接创建对象的代价比较大时,则采用这种模式。例如,一原创 2020-07-31 18:55:48 · 141 阅读 · 0 评论 -
设计模式之建造者模式
建造者模式(1)概念建造者模式(Builder Pattern)使用多个简单的对象一步一步构建成一个复杂的对象。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。一个 Builder 类会一步一步构造最终的对象。该 Builder 类是独立于其他对象的。(2)适用场景1、需要生成的对象具有复杂的内部结构。 2、需要生成的对象内部属性本身相互依赖。**注意事项:**与工厂模式的区别是:建造者模式更加关注与零件装配的顺序。(3)代码示例我们假设一个快餐店的商业案例,其中,一个典型原创 2020-07-31 11:45:57 · 271 阅读 · 0 评论 -
设计模式之工厂模式
1.2 工厂模式源代码地址:https://gitee.com/zyxscuec/Design-pattern.git文章目录1.2 工厂模式1.2.1 简单工厂模式(1)概念(2)适用场景(3)代码示例(4)模式在源码中的体现(5)简单工厂模式的优缺点1.2.2 抽象工厂模式(1) 概念(2)适用场景(3)代码实例(4)模式在源代码中的体现(5)抽象工厂模式的优缺点1.2.3 工厂方法模式(1)概念(2)适用场景(3)代码实例(4)工厂方法模式的在源码中的体现(在Android源码体现的比较多)(5)原创 2020-07-30 22:19:55 · 181 阅读 · 0 评论 -
设计模式之代理模式
代理模式所有代码地址: https://gitee.com/zyxscuec/Design-pattern.git文章目录代理模式(1) 概念(2)适用场景(3)代码示例1. 静态代理模式2. 动态代理模式(4) 模式在源码中的体现(5)代理模式的优缺点(6) 动态代理模式和静态代理模式的区别(1) 概念代理模式(ProxyPattern)的定义也非常简单,是指为其他对象提供一种代理,以控制对这个对象的访问。代理对象在客服端和目标对象之间起到中介作用,代理模式属于结构型设计模式。(2)适用场景原创 2020-07-30 11:48:48 · 612 阅读 · 0 评论 -
设计模式之观察者模式
观察者模式所有源代码地址 https://gitee.com/zyxscuec/Design-pattern.git文章目录观察者模式(1) 概念(2)适用场景(3) 代码示例(4) 模式在源码中的体现(5)基于 Guava API 轻松落地观察者模式(6) 观察者模式的优缺点(1) 概念观察者模式(Observer Pattern)定义了对象之间的一对多依赖,让多个观察者对象同时监听一个主体对象,当主体对象发生变化时,它的所有依赖者(观察者)都会收到通知并更新,属于行为型模式。观察者模式有时也叫做原创 2020-07-30 10:16:33 · 227 阅读 · 0 评论 -
设计模式之装饰器模式
装饰器模式代码地址:https://gitee.com/zyxscuec/Design-pattern.git文章目录装饰器模式(1)概念(2)适用场景(3)代码示例装饰者模式和适配器模式对比(4)模式在源码中的体现(5)装饰器模式的优缺点(1)概念装饰者模式(Decorator Pattern)是指在不改变原有对象的基础之上,将功能附加到对象上,提供了比继承更有弹性的替代方案(扩展原有对象的功能),属于结构型模式。(2)适用场景装饰者模式在我们生活中应用也比较多如给煎饼加鸡蛋;给蛋糕加上一些水原创 2020-07-29 22:51:11 · 259 阅读 · 3 评论 -
设计模式之适配器模式
适配器模式所有代码地址 https://gitee.com/zyxscuec/Design-pattern.git文章目录适配器模式(1)概念(2)适用场景(3)代码示例(4)重构第三登录自由适配的业务场景(5)模式在源码中的体现(6)适配器模式的优缺点(1)概念适配器模式(Adapter Pattern)是指将一个类的接口转换成客户期望的另一个接口,使原本的接口不兼容的类可以一起工作,属于结构型设计模式。(2)适用场景1、已经存在的类,它的方法和需求不匹配(方法结果相同或相似)的情况。2原创 2020-07-29 21:45:33 · 224 阅读 · 0 评论 -
设计模式之模板模式
模板模式(1)概念模板模式通常又叫模板方法模式(Template Method Pattern)是指定义一个算法的骨架,并允许子类为一个或者多个步骤提供实现。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法的某些步骤,属于行为性设计模式。(2)适用场景1、一次性实现一个算法的不变的部分,并将可变的行为留给子类来实现。2、各子类中公共的行为被提取出来并集中到一个公共的父类中,从而避免代码重复。3、通常,在微服务架构中一般会建立一个common的module,里面抽取公共的类,然后其他原创 2020-07-29 20:56:17 · 276 阅读 · 0 评论 -
设计模式之策略模式
策略模式文章目录策略模式(1)概念:(2)策略模式的应用场景(3)用策略模式实现选择支付方式的业务场景(4) 策略模式的优缺点(1)概念:策略模式(Strategy Pattern)是指定义了算法家族、分别封装起来,让它们之间可以互相替换,此模式让算法的变化不会影响到使用算法的用户。(2)策略模式的应用场景1、假如系统中有很多类,而他们的区别仅仅在于他们的行为不同。2、一个系统需要动态地在几种算法中选择一种。(3)用策略模式实现选择支付方式的业务场景大家都知道,很多电商平台经常会有优惠活原创 2020-07-29 17:40:29 · 187 阅读 · 0 评论 -
设计模式之单例模式
设计模式所有的源码请参考 https://gitee.com/zyxscuec/Design-pattern.git一、创造型设计模式1.1 单例模式单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。单例模式的类结构图注意:1、单例类原创 2020-07-28 22:33:16 · 175 阅读 · 0 评论