设计模式
文章平均质量分 88
设计模式
Gangbb
这个作者很懒,什么都没留下…
展开
-
面试题--设计模式相关
jdk源码中用到了哪些设计模式?(1)单例模式单例模式用于Runtime,Calendar和其他的一些类中。“饿汉式”是在不管你用的用不上,一开始就建立这个单例对象(2)工厂模式被用于各种不可变的类如Boolean,像Boolean.valueOf方法。(3)装饰模式装饰器模式被用于多个javaIO类(4)代理模式Jdk动态代理。(5)迭代器模式Java集合中的迭代器。工厂模式和简单工厂模式的区别1、简单工厂模式中包含判断什么对象的逻辑,而工厂方法模式则需要调用者判断要实例化什么原创 2022-02-03 23:05:48 · 515 阅读 · 0 评论 -
设计模式学习笔记--访问者模式(详细笔记)
文章目录1. 概述2. 使用实例1. 概述使用背景:主要将数据结构与数据操作分离。稳定的数据结构和易变的操作耦合问题。需要对一个对象结构中的对象进行很多不同的并且不相关的操作,而需要避免让这些操作"污染"这些对象的类,使用访问者模式将这些封装到类中。在被访问的类里面加一个对外提供接待访问者的接口。定义:《大话设计模式》访问者模式( Visitor),表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。菜鸟教程在访问者模式(Visi原创 2021-12-18 09:34:51 · 630 阅读 · 0 评论 -
设计模式学习笔记--模板方法模式(详细笔记)
文章目录1. 概述2. 使用实例1. 概述使用背景:菜鸟教程定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。一些方法通用,却在每一个子类都重新写了这一方法。定义:《大话设计模式》模板方法模式,定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。菜鸟教程在模板模式(Template Pattern)中,一个抽象类公开定义了执行它的方法的原创 2021-12-18 09:33:48 · 231 阅读 · 0 评论 -
设计模式学习笔记--策略模式(详细笔记)
1. 概述使用背景:定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换。在有多种算法相似的情况下,使用 if…else 所带来的复杂和难以维护。一个系统有许多许多类,而区分它们的只是他们直接的行为。将这些算法封装成一个一个的类,任意地替换。定义:《大话设计模式》策略模式(Strategy):它定义了算法家族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化,不会影响到使用算法的客户。《图说设计模式》策略模式(Strategy Pattern):定义一系列算法,将每一原创 2021-12-18 08:40:47 · 839 阅读 · 0 评论 -
设计模式学习笔记--状态模式模式(详细笔记)
文章目录1. 概述2. 代码理解3. 使用示例1. 概述使用背景:《大话设计模式》“状态模式主要解决的是当控制一个对象状态转换的条件表达式过于复杂时的情况。把状态的判断逻辑转移到表示不同状态的一系列类当中,可以把复杂的判断逻辑简化。当然,如果这个状态判断很简单,那就没必要用‘状态模式’了。”菜鸟教程对象的行为依赖于它的状态(属性),并且可以根据它的状态改变而改变它的相关行为。代码中包含大量与对象状态有关的条件语句。定义:《大话设计模式》状态模式(State),当一个对象的内在状态改变原创 2021-12-18 08:38:55 · 708 阅读 · 0 评论 -
设计模式学习笔记--观察者模式(详细笔记)
文章目录1. 概述2. 使用实例1. 概述使用背景:菜鸟教程定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。一个对象状态改变给其他对象通知的问题,而且要考虑到易用和低耦合,保证高度的协作。一个对象(目标对象)的状态发生改变,所有的依赖对象(观察者对象)都将得到通知,进行广播通知。定义:《大话设计模式》观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时,会通知所有观察者对象,使原创 2021-12-17 23:29:04 · 400 阅读 · 0 评论 -
设计模式学习笔记--备忘录模式(详细笔记)
文章目录1. 概述2. 使用实例1. 概述使用背景:菜鸟教程在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。所谓备忘录模式就是在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样可以在以后将对象恢复到原先保存的状态。很多时候我们总是需要记录一个对象的内部状态,这样做的目的就是为了允许用户取消不确定或者错误的操作,能够恢复到他原先的状态,使得他有"后悔药"可吃。定义:《大话设计模式》备忘录(Memento):在不破坏封装性的前提下,捕原创 2021-12-15 11:42:56 · 1097 阅读 · 0 评论 -
设计模式学习笔记--中介者模式(详细笔记)
文章目录1. 概述2. 使用实例1. 概述使用背景:菜鸟教程用一个中介对象来封装一系列的对象交互,中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。对象与对象之间存在大量的关联关系,这样势必会导致系统的结构变得很复杂,同时若一个对象发生改变,我们也需要跟踪与之相关联的对象,同时做出相应的处理。多个类相互耦合,形成了网状结构。《图说设计模式》在用户与用户直接聊天的设计方案中,用户对象之间存在很强的关联性,将导致系统出现如下问题:系统结构原创 2021-12-15 10:06:23 · 1238 阅读 · 0 评论 -
设计模式学习笔记--迭代器模式(详细笔记)
文章目录1. 概述2 使用实例1. 概述使用背景:定义:《大话设计模式》迭代器模式((Iterator),提供一种方法顺序访问一个聚合对象中各个元素,而又不暴露该对象的内部表示。菜鸟教程迭代器模式(Iterator Pattern)是 Java 和 .Net 编程环境中非常常用的设计模式。这种模式用于顺序访问集合对象的元素,不需要知道集合对象的底层表示。**类型:**行为型结构:《大话设计模式》《深入设计模式》适用场景:菜鸟教程1、访问一个聚合对象的内容而无须暴露它的内部表原创 2021-12-15 09:15:51 · 521 阅读 · 0 评论 -
设计模式学习笔记--命令模式(详细笔记)
文章目录1. 概述3. 使用实例1. 概述使用背景:菜鸟教程在软件系统中,行为请求者与行为实现者通常是一种紧耦合的关系,但某些场合,比如需要对行为进行记录、撤销或重做、事务等处理时,这种无法抵御变化的紧耦合的设计就不太合适。在某些场合,比如要对行为进行"记录、撤销/重做、事务"等处理,这种无法抵御变化的紧耦合是不合适的。在这种情况下,如何将"行为请求者"与"行为实现者"解耦?将一组行为抽象为对象,可以实现二者之间的松耦合。定义:《大话设计模式》命令模式(Command),将一个请求封装为原创 2021-12-14 19:46:35 · 517 阅读 · 0 评论 -
设计模式学习笔记--责任链模式(详细笔记)
文章目录1. 概述2. 使用实例1. 概述使用背景:菜鸟教程避免请求发送者与接收者耦合在一起,让多个对象都有可能接收请求,将这些对象连接成一条链,并且沿着这条链传递请求,直到有对象处理它为止。职责链上的处理者负责处理请求,客户只需要将请求发送到职责链上即可,无须关心请求的处理细节和请求的传递,所以职责链将请求的发送者和请求的处理者解耦了。定义:《大话设计模式》职责链模式(Chain of Responsibility):使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关原创 2021-12-14 19:45:28 · 412 阅读 · 0 评论 -
设计模式学习笔记--亨元模式(详细笔记)
文章目录1. 概述2. 使用实例1. 概述使用背景:菜鸟教程运用共享技术有效地支持大量细粒度的对象。在有大量对象时,有可能会造成内存溢出,我们把其中共同的部分抽象出来,如果有相同的业务请求,直接返回在内存中已有的对象,避免重新创建。定义:《大话设计模式》享元模式(Flyweight),运用共享技术有效地支持大量细粒度的对象。菜鸟教程享元模式(Flyweight Pattern)主要用于减少创建对象的数量,以减少内存占用和提高性能。这种类型的设计模式属于结构型模式,它提供了减少对象数量原创 2021-12-14 16:00:59 · 863 阅读 · 0 评论 -
设计模式学习笔记--外观模式(详细笔记)
文章目录1. 概述2. 使用实例1. 概述使用背景:菜鸟教程降低访问复杂系统的内部子系统时的复杂度,简化客户端之间的接口。定义:《大话设计模式》外观模式(Facade),为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。菜鸟教程外观模式(Facade Pattern)隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口。这种类型的设计模式属于结构型模式,它向现有的系统添加一个接口,来隐藏系统的复杂性。《图说设计模式》外观模式原创 2021-12-13 11:48:24 · 289 阅读 · 0 评论 -
设计模式学习笔记--组合模式(详细笔记)
文章目录1. 概述2. 使用实例1. 概述使用背景:菜鸟教程它在我们树型结构的问题中,模糊了简单元素和复杂元素的概念,客户程序可以像处理简单元素一样来处理复杂元素,从而使得客户程序与复杂元素的内部结构解耦。定义:《大话设计模式》组合模式(Composite),将对象组合成树形结构以表示‘部分-整体’的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。菜鸟教程组合模式(Composite Pattern),又叫部分整体模式,是用于把一组相似的对象当作一个单一的对象。组合模式依据原创 2021-12-13 11:47:06 · 636 阅读 · 0 评论 -
设计模式学习笔记--桥接模式(详细笔记)
文章目录1. 概述2. 使用实例1. 概述使用背景:菜鸟教程在有多种可能会变化的情况下,用继承会造成类爆炸问题,扩展起来不灵活。实现系统可能有多个角度分类,每一种角度都可能变化。把这种多角度分类分离出来,让它们独立变化,减少它们之间耦合。定义:《大话设计模式》桥接模式(Bridge),将抽象部分与它的实现部分分离,使它们都可以独立地变化。《图说设计模式》桥接模式(Bridge Pattern):将抽象部分与它的实现部分分离,使它们都可以独立地变化。它是一种对象结构型模式,又称为柄体(原创 2021-12-13 11:41:47 · 694 阅读 · 0 评论 -
设计模式学习笔记--适配器模式(详细笔记)
文章目录1. 概述2. 代码理解3. 使用示例1. 概述使用背景:《大话设计模式》在软件开发中,也就是系统的数据和行为都正确,但接口不符时,我们应该考虑用适配器,目的是使控制范围之外的一个原有对象与某个接口匹配。适配器模式主要应用于希望复用一些现存的类,但是接口又与复用环境要求不一致的情况,比如在需要对早期代码复用一些功能等应用上很有实际价值。菜鸟教程将一个类的接口转换成客户希望的另外一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。定义:《大话设计模式原创 2021-12-12 08:10:40 · 556 阅读 · 0 评论 -
UML建模语言
1.UML概述UML定义:统一建模语言(Unified Modeling Language)(非专利的第三代建模和规约语言)UML特点:UML是一种开放的方法用于说明、可视化、构建和编写一个正在开发的面向对象的、软件密集系统的制品的开放方法。UML展现了一系列最佳工程实践,这些最佳实践在对大规模、复杂系统进行建模方面,特别是在软件架构层次已经被验证有效2.UML2.2分类2.1 结构式图形强调的是系统式的建模包含:静态图(类图、对象图、包图)实现图(组件图、部署图)剖面图复原创 2021-03-27 18:07:44 · 571 阅读 · 0 评论 -
单例模式问题:单例模式中的类成员是否需要加final修饰
饿汉式:加入final修饰对于模式实现本身无影响//创建该类型的私有静态实例private static final SingletonOne instance = new SingletonOne();//创建公有静态方法返回静态实例对象public static SingletonOne getInstance(){ return instance;}懒汉式:加入final修饰产生编译报错,提示信息为:无法对final修饰的成员进行操作。原因是:final修饰的静态成员,如果在定义原创 2021-12-10 17:03:14 · 1237 阅读 · 0 评论 -
设计模式学习笔记--单例模式(详细笔记)
文章目录1. 概述2. 代码实现2.1 静态类实现2.2 懒汉式(线程不安全)2.3 懒汉模式(线程安全)2.4 饿汉模式(线程安全)2.5 使用类的内部类(线程安全)2.6 双重锁校验(线程安全)2.7 CAS 「AtomicReference」(线程安全)2.8 插叙:利用反射破坏单例模式2.9 Effective Java作者推荐的枚举单例(线程安全)2.10 序列化和Singleton3. 使用示例4. 总结1. 概述使用背景:《大话设计模式》通常我们可以让一个全局变量使得一个对象被访问,原创 2021-12-10 15:22:11 · 1263 阅读 · 0 评论 -
设计模式--建造者模式
文章目录1. 建造者模式1.1 概述1.2 代码理解1.3 开源框架源码使用分析1.3.1 JDK中的Builder1.3.2 ImmutableSet1.3.3 spring中的BeanDefinitionBuilder1.3.4 mybatis中的SqlSessionFactoryBuilder1.4 趣味理解1. 建造者模式1.1 概述定义:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示特征:用户只需指定需要建造的类型就可以得到它们,建造过程及细节不需要知道**原创 2021-04-16 22:50:33 · 153 阅读 · 0 评论 -
设计模式--抽象工厂模式
文章目录3.抽象工厂模式3.1 概述3.2 代码理解3.3 开源框架源码使用分析3.3.1 JDK数据库连接接口抽象工厂示例3.3.2 Mybatis中SqlSessionFactory3.抽象工厂模式3.1 概述定义:抽象工厂模式提供一个创建一系列相关或相互依赖对象的接口(无需指定它们具体的类)类型:创建型适用场景:客户端(应用层)不依赖于产品类实例如何被创建、实现等细节强调一系列相关的产品对象(属于同一产品族)一起使用创建对象需要大量重复的代码提供一个产品类的库,所有的产品以同样的接原创 2021-03-30 08:02:53 · 350 阅读 · 0 评论 -
设计模式--工厂方法模式
文章目录2.工厂方法2.1 概述2.2 代码理解2.3 开源框架源码使用分析2.3.1 Java集合中的工厂方法体现2.3.2 JDK中解决url协议扩展的接口2.4 趣味理解2.工厂方法2.1 概述定义:定义一个创建对象的接口,但让实现这个接口的类来决定实例化哪个类工厂方法让类的实例化推迟到子类中进行。类型:创建型适用场景:创建对象需要大量重复的代码客户端(应用层)不依赖于产品类实例如何被创建、实现等细节一个类通过其子类来指定创建哪个对象优点:用户只需关心所需产品对应的工厂,无需原创 2021-03-28 17:51:17 · 344 阅读 · 0 评论 -
设计模式--简单工厂模式
1.简单工厂模式1.1 概述**定义:**由一个工厂对象决定创建出哪一种产品类的实例**类型:**创建型,但不属于GOF23种设计模式适用场景:工厂类负责创建的对象比较少客户端(应用层)只知道传入工厂类的参数,对于如何创建对象(逻辑)不关心优点:1、工厂类含有必要的判断逻辑,可以决定在什么时候创建哪一个产品类的实例,客户端可以免除直接创建产品对象的责任,而仅仅“消费”产品;2、简单工厂模式通过这种做法实现了对责任的分割,它提供了专门的工厂类用于创建对象。3、客户端无须知道所创建的具体原创 2021-03-27 22:49:56 · 211 阅读 · 0 评论