![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
设计模式
文章平均质量分 76
yygr
这个作者很懒,什么都没留下…
展开
-
设计模式——门面模式
(Facade Design Pattern)门面模式也叫外观模式,门面模式为子系统提供一组统一的接口,定义一组高层接口让子系统更易用。门面模式原理和实现也比较简单,应用场景也比较明确,主要在接口设计方面使用。解决易用性问题。解决性能问题。解决分布式事务问题。image.png角色组成:门面角色:客户端调用这个角色的方法。此角色知晓相关的子系统的功能和责任。正常情况下,本角色会将所有从客户端发来的请求委派到相应的子系统中去。子系统角色:可以同时有一个或者多个子系统。转载 2024-04-09 15:12:45 · 24 阅读 · 0 评论 -
装饰器模式与代理模式区别
从类图可以发现二者的第一点区别在于装饰模式里装饰类与目标对象是解耦的,装饰对象并不感知目标对象的存在,由我们(调用方)控制对目标对象的引用。而这也是装饰模式与代理模式的本质区别:谁控制了目标对象的引用。而当调用方拥有了目标类,只有执行到装饰器这行代码时才知道具体装饰了哪个类,这在目标类的功能扩展实现上提供了便利,我们仅需一个装饰器类就可以装饰多个目标类。而代理模式则在代理类中写死了代理的是具体哪个目标类,不易扩展。代理模式的定义为“为其他对象提供 一种代理以控制对这个对象的访问。转载 2024-04-09 14:17:32 · 33 阅读 · 0 评论 -
设计模式-23种设计模式的分类和功能
设计模式的出现并不是说我们要写的代码一定要遵循设计模式所要求的方方面面,这是不现实同时也是不可能的。设计模式的出现,其实只是强调好的代码所具备的一些特征(六大设计原则),这些特征对于项目开发是具备积极效应的,但不是说我们每实现一个类就一定要全部满足设计模式的要求,如果真的存在完全满足设计模式的要求,反而可能存在过度设计的嫌疑。设计模式的理解应该重于意而不是形,真正编码时,经常使用的是某种设计模式的变形体,真正切合项目的模式才是正确的模式。分类有两个维度:1、模式的目的,2、模式的作用范围。转载 2022-09-15 21:46:50 · 142 阅读 · 0 评论 -
设计模式-六大设计原则
一个对象应该对其他对象保持最少的了解。转载 2022-09-14 20:39:33 · 122 阅读 · 0 评论 -
设计模式解析三 行为模式三剑客
https://www.jianshu.com/p/808be4307d51设计模式解析一 工厂模式的不同 设计模式解析二 结构模式三剑客 设计模式解析三 行为模式三剑客 设计模式解析四 模板方法模式和外观模式 设计模式解析五 观察者模式和桥接模式 设计模式解析六 单例模式一. 前言前一章讲了结构模式三剑客,而为什么会把装饰模式、代理模式和适配器模式称为结构模式三剑客呢,实际上这三个模式在结构模式使用使用最为广泛,而且最容易弄混,因为这三种设计模式非常相像。实际上行为模式中也有这样转载 2022-04-21 11:27:12 · 100 阅读 · 0 评论 -
设计模式解析五 观察者模式和桥接模式
https://www.jianshu.com/p/780fe52ed52c?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation设计模式解析一 工厂模式的不同 设计模式解析二 结构模式三剑客 设计模式解析三 行为模式三剑客 设计模式解析四 模板方法模式和外观模式 设计模式解析五 观察者模式和桥接模式 设计模式解析六 单例模式一. 前言第五篇转载 2022-04-21 11:09:24 · 317 阅读 · 0 评论 -
策略模式与桥接模式区别
https://www.cnblogs.com/youxin/archive/2013/05/10/3072051.html桥接模式如下:策略如下:在桥接中,Abstraction通过聚合方式引用Implementor.在策略中,Context也通过聚合引用Strategy.桥接(Bridge)模式是结构型模式的一种,而策略(strategy)模式则属于行为模式。从他们的结构图可知,在这两种模式中,都存在一个对象使用聚合的方式引用另一个对象的抽象接口的情况,而且该抽象接口转载 2022-04-19 09:51:49 · 253 阅读 · 0 评论 -
委派模式详解
https://www.cnblogs.com/zekichen/p/12527924.html一、委派模式委派模式(Delegate Pattern):指负责任务的调度和分配任务,跟代理模式很像,可以看做是一种特殊情况下的静态代理的全权代理,但是代理模式注重过程,而委派模式注重结果。(属于行为型模式,但它不属于GOF的23种设计模式之一。类名以Delegate和Dispatcher结尾的一般都是委派模式)委派模式在Spring中应用非常多,大家常用的DispatcherServlet其实就转载 2022-03-26 16:58:28 · 849 阅读 · 0 评论 -
Java钩子方法概念原理详解
https://www.jb51.net/article/180164.htm这篇文章主要介绍了Java钩子方法概念原理详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下钩子方法源于设计模式中模板方法(Template Method)模式,模板方法模式的概念为:在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。其主要分为两大类:模版方法和基本方法,而基本方法又分为:转载 2022-03-11 11:51:51 · 768 阅读 · 0 评论 -
中介者模式和观察者模式区别?
https://www.cnblogs.com/ygpx-hgy/p/9535273.html中介者(mediator)强调的是同事(colleague)类之间的交互而观察者(observer)中的目标类(subject)强调是目标改变后对观察者进行统一的通讯两者非常相同的一点就是:中介者需要持有并且知道所有的同事类,而观察者中目标类也必须持有所有的目标类,但是是以目标类的接口引用方式持有,所以说目标类是不知道观察者的所以观察者模式有一个更容易理解的名称"发布-订阅模式"...转载 2022-02-20 21:22:30 · 436 阅读 · 0 评论 -
策略模式与桥接模式区别
https://blog.csdn.net/tiancityycf/article/details/107216143参考:https://www.phpmianshi.com/?id=65实际上所有模式可以只分为类模式和对象模式两种,类模式是用继承而对象模式是用关联。模式结构桥接模式:策略模式:在桥接中,Abstraction通过聚合方式引用Implementor.在策略中,Context也通过聚合引用Strategy.桥接(Bridge)模式是结构型模式的一种,而策略(strateg转载 2022-02-18 16:43:03 · 113 阅读 · 0 评论 -
JDK源码——利用模板方法看设计模式
https://blog.csdn.net/Java_fenxiang/article/details/89529048前言:相信很多人都听过一个问题:把大象关进冰箱门,需要几步?第一,把冰箱门打开;第二,把大象放进去;第三,把冰箱门关上。我们可以看见,这个问题的答案回答的很有步骤。接下来我们介绍一种设计模式——模板方法模式,你会发现,它与这个问题的答案实际上有很多共同之处。一、定义定义一个算法骨架,允许子类为一个或多个步骤提供实现。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法的某些转载 2022-02-17 19:55:25 · 124 阅读 · 0 评论 -
享元模式(Flyweight Pattern)详解
https://www.cnblogs.com/amei0/p/7930013.html享元模式(Flyweight Pattern)定义:采用一个共享来避免大量拥有相同内容对象的开销。这种开销中最常见、直观的就是内存的损耗。享元模式以共享的方式高效的支持大量的细粒度对象。享元的英文是flyweight,是一个来自体育方面的专业用语,在拳击、摔跤和举重比赛中特指最轻量的级别。把这个单词移植到软件工程中,也是用来表示特别小的对象,即细粒度的对象。至于为什么把flyweight翻译为享元,可以理解为共享转载 2022-02-16 21:08:55 · 1393 阅读 · 0 评论 -
常用设计模式
比较重要的设计模式:策略模式、观察者模式(又称做事件机制)和适配器模式策略模式策略模式就是有一个封装类,这个封装类中会使用一个接口,而这个接口的实现是通过方法传入进来的.在调用这个封装类里的方法的时候,会调用接口的方法.这样就是实现了根据不同实现类来实现不同的策略.1、如果在一个系统里面有许多类,它们之间的区别仅在于它们的行为,那么使用策略模式可以动态地让一个对象在许多行为中选择一种行为...转载 2019-06-28 11:20:31 · 107 阅读 · 0 评论 -
UML六种关系在代码中的体现说明
https://blog.csdn.net/Ginny97/article/details/113971479前言本篇文章是小编采用代码与图(IDE逆向工程生成)对应的方式进行研究和探索。众所周知,uml六种关系强弱表示:继承>实现>组合>聚合>关联>依赖。关于UML中六大关系的图形表示想必大家已经了然于胸,但是不同的IDE工具对于这六种关系的图形展示也有所不同,本篇文章小编首先要为大家介绍IDE开发工具——IDEA的图形表示,之后再以关系从强到弱的顺序依次为大家介绍六转载 2022-02-16 09:39:48 · 747 阅读 · 0 评论 -
适配器模式(Adapter模式)详解
http://c.biancheng.net/view/1361.html在现实生活中,经常出现两个对象因接口不兼容而不能在一起工作的实例,这时需要第三者进行适配。例如,讲中文的人同讲英文的人对话时需要一个翻译,用直流电的笔记本电脑接交流电源时需要一个电源适配器,用计算机访问照相机的 SD 内存卡时需要一个读卡器等。在软件设计中也可能出现:需要开发的具有某种业务功能的组件在现有的组件库中已经存在,但它们与当前系统的接口规范不兼容,如果重新开发这些组件成本又很高,这时用适配器模式能很好地解决这些问题。转载 2022-02-15 16:53:41 · 2805 阅读 · 0 评论 -
利用 Builder 模式构建 Java 对象
https://www.jianshu.com/p/ba7d2231ec32一般我们构建对象有两种方法,一是构造器,二是默认无参构造器创建对象后使用 set 方法一个个赋值。第一种方法我们需要写一个全参的构造方法,但这样我们在构造对象时有一些不需要填写的对象也要给他赋值,而且对应参数可能弄混(虽然强大的 idea 可以清楚的提示),第二种方法很清晰,但代码冗余,写起来也累。如果类中变量不多,用哪种方法都差不多,但如果变量很多,或者说构建对象时需要传入的参数很多,我们就需要用到 builder 构建对象。转载 2022-02-12 11:43:06 · 1976 阅读 · 0 评论 -
Java查看动态代理生成的代码
https://www.cnblogs.com/ctgulong/p/5011614.html1.创建一个导出生成类的agentagent是一个用来个jvm打交道的东西,需要实现一个静态的public static void premain(String agentArgs, Instrumentation inst) 方法.我使用如下的代码创建agentpackage ctgu.jagent;import java.io.File;import java.io.FileOutputStream转载 2022-02-09 21:29:19 · 533 阅读 · 0 评论 -
JAVA静态代理和动态代理理解
https://www.cnblogs.com/cC-Zhou/p/9525638.html代理代理是英文 Proxy 翻译过来的。我们在生活中见到过的代理,大概最常见的就是朋友圈中卖面膜的同学了。她们从厂家拿货,然后在朋友圈中宣传,然后卖给熟人。按理说,顾客可以直接从厂家购买产品,但是现实生活中,很少有这样的销售模式。一般都是厂家委托给代理商进行销售,顾客跟代理商打交道,而不直接与产品实际生产者进行关联。所以,代理就有一种中间人的味道。接下来,我们说说软件中的代理模式。代理模式代理模式是转载 2022-02-09 15:50:22 · 92 阅读 · 0 评论 -
装饰器模式详解(与IO不解的情缘)
https://www.cnblogs.com/zuoxiaolong/p/pattern11.html本章讨论一个与JAVA中IO有着不解情缘的设计模式,装饰器模式。定义:装饰模式是在不必改变原类文件和使用继承的情况下,动态的扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。这一个解释,引自百度百科,我们注意其中的几点。1,不改变原类文件。2,不使用继承。3,动态扩展。上述三句话一语道出了装饰器模式的特点,下面LZ给出装饰器模式的类图,先上图再解释。从图中可以看到转载 2022-02-04 11:30:13 · 264 阅读 · 0 评论 -
装饰器模式在 Collections 类中的应用
https://blog.csdn.net/u010711495/article/details/117676311 我们前面讲到,Java IO 类库是装饰器模式的非常经典的应用。实际上,Java 的 Collections 类也用到了装饰器模式。 Collections 类是一转载 2022-02-04 10:48:51 · 185 阅读 · 0 评论 -
Spring的单例实现原理-登记式单例
https://www.cnblogs.com/twoheads/p/9723543.html单例模式有饿汉模式、懒汉模式、静态内部类、枚举等方式实现,但由于以上模式的构造方法是私有的,不可继承,Spring为实现单例类可继承,使用的是单例注册表的方式(登记式单例)。什么是单例注册表登记式单例实际上维护的是一组单例类的实例,将这些实例存储到一个Map(登记簿)中,对于已经登记过的单例,则从工厂直接返回,对于没有登记的,则先登记,而后返回使用map实现注册表;使用protect修饰构造方法;有转载 2022-02-04 10:39:35 · 359 阅读 · 0 评论 -
单例设计模式的继承问题
http://blog.sina.com.cn/s/blog_4d4f34b001016k61.html在开始学习单例设计模式的时候,没搞清楚是否能被继承,所以动手去测试一下:public class Single_Extends_Test { public static void main(String[] args) { //Single s = new Single(); 这个实例化是要调用Single的构造函数,被privat修饰,不能实例化 //Single转载 2022-02-04 09:14:55 · 1824 阅读 · 0 评论 -
单例模式双检锁方式要加volatile的原因
不加volatile的代码public class SingletonKerriganD { /** * 单例对象实例 */ private static SingletonKerriganD instance = null; public static SingletonKerriganD getInstance() { if (instance == null) { synchr转载 2022-01-17 15:46:57 · 155 阅读 · 0 评论 -
什么是不变模式
多线程对同一个对象进行操作时,为了保证对象数据的一致性和准确性,需要做相应的同步,来保证原子性,有序性以及可见性。不过这是因为被访问的对象是可变的,所以才需要各种手段去保证线程安全,试想下,如果对象一开始就是不可变的,那么是不是就意味着这个对象就是线程安全的,而无需额外的手段保证呢,答案是肯定的,String类就是一个很好的例子。可以把保证对象不可变的这种方式称为不变模式,它的核心就在于,一旦对象被创建了,那么这个对象的内部状态和数据就永远都不会改变。什么场景适用于不变模式?对象被创建出来后,其内转载 2022-01-16 16:24:26 · 112 阅读 · 0 评论 -
java利用静态内部类实现链式调用
使用场景这个就非常重要了,因为如果你学了个东西,都不知道用来解决什么问题,你说有什么用?理解使用场景的的重要性要远高于你是不是会实现这个模式,因为只要你知道什么问题可以使用builder模式来解决,那你即使不会写,也可以在调查相关资料后完成。 我不想说一些大而正确的术语来把你搞蒙,我们只针对具体的问题,至于延展性的思考,随着你知识的增长,逐渐会明白的。延展阅读当一个类的构造函数参数个数超过4个,而且这些参数有些是可选的参数,考虑使用构造者模式。解决的问题当一个类的构造函数参数超过4个,而且这些参数有转载 2021-12-25 12:17:45 · 827 阅读 · 0 评论 -
贫血模式和充血模式
一、贫血模型所谓贫血模型,是指Model 中,仅包含状态(属性),不包含行为(方法),采用这种设计时,需要分离出DB层,专门用于数据库操作。二、充血模型Model 中既包括状态,又包括行为,是最符合面向对象的设计方式。...转载 2019-07-18 11:08:18 · 2465 阅读 · 0 评论 -
适配器模式总结
适配器注意使用场景:有动机地修改一个正常运行的系统的接口,这时应该考虑使用适配器模式。注意事项:适配器不是在详细设计时添加的,而是解决正在服役的项目的问题。适配器关键点适配器的关键就是,将被适配者加载到已经定义好的或在运行的系统中.适配器需要实现目前运行系统中的接口,并转成被适配者需要的格式.适配器例子笔记本通过读卡去读取TF卡;一、先模拟计算机读取SD卡:1、先创建一个SD卡的接...转载 2019-06-28 11:27:07 · 192 阅读 · 0 评论 -
建造者模式和装饰器模式总结
建造者模式应用实例: 去肯德基,汉堡、可乐、薯条、炸鸡翅等是不变的,而其组合是经常变化的,生成出所谓的"套餐"。建造者模式就是创建不同的builder,不同的builder里创建了不同的基本元素体,然后不同的builder就是不同的建造者装饰器模式装饰器模式就是和被装饰者实现相同的接口,然后装饰器可以传入被装饰者,然后在装饰器的该方法里调用被装饰者的方法,并添加新的装饰逻辑.实际就是...转载 2019-06-26 10:08:18 · 841 阅读 · 2 评论