23种设计模式
文章平均质量分 77
一叶一菩提魁
这个作者很懒,什么都没留下…
展开
-
策略模式 VS 状态模式
在行为类设计模式中,状态模式和策略模式是亲兄弟,两者非常相似,两个类图非常相似,都是通过Context类封装一个具体的行为,都提供了一个封装的方法,是高扩展性的设计模式。但根据两者的定义,我们发现两者的区别还是很明显的:策略模式封装的是不同的算法,算法之间没有交互,以达到算法可以自由切换的目的;而状态模式封装的是不同的状态,以达到状态切换行为随之发生改变的目的。这两种模式虽然都有变换的行为,但是两者的目标却是不同的。从关注焦点区分策略模式关注的焦点在于具体的某一个行为,准确的说是某一行为的具体执行过程转载 2022-01-12 11:16:28 · 703 阅读 · 0 评论 -
设计模式之策略模式
一句话总结我有选择恐惧症 你别让我一个一个挑 我给你说需求 你帮我挑好选择恐惧症选择恐惧症选择恐惧症 说明了能选择的不止一个 (对应的策略不止一个)每一个策略对应一个类我给你说需求这个地方我刚开始也不理解 刚开始学习的时候就知道需要那个策略直接NEW 就行了我怎么知道该New 那一个 难道要if else 判断 如果是这样 那还用啥策略模式?这个时候你会想到 就算 判断 是不是有个判断的依据 如 下图 这里的paymentType不就是我要的需求吗 ?我给你个paymen原创 2022-01-12 11:08:20 · 359 阅读 · 0 评论 -
设计模式之状态模式
一句话总结设计模式之状态模式原创 2022-01-10 16:11:50 · 155 阅读 · 0 评论 -
原型模式+备忘录模式实现游戏角色的存档功能
一句话总结你保管好我不定时分出来的分身们 , 方便我的灵魂来回切换你保管说明是保存在对象之外的 (另外找一个类)//创建看管角色对象的类class Caretaker { //维护一个保存游戏角色当前状态的集合 Map<String, GameRole> memento; public Caretaker() { memento = new HashMap<>();//创建时初始化集合 } //添加一个角色原创 2022-01-10 09:47:23 · 2212 阅读 · 0 评论 -
设计模式之中介模式
一句话理解 :我们交换 名片, 有事 告诉我 找谁,我处理首先是我的名片 你拿着我的名片才能有事告诉我 也就是说你要包含我的引用对吧接下来是你们的名片 你们要把名片给我 是不是太多不好拿 我是不是要有个文件夹你啥时候把名片给我 你可以在创建的时候给我 (在构造方法中) 也可以创建完成后在给我(单独在写个方法)这里我们在构造方法中给- 怎末告诉我找谁类当你想找我是不是要拿我名片打我电话调用我的方法告诉我 找谁 干啥 (至少有两个参数 吧原创 2022-01-07 10:26:33 · 592 阅读 · 0 评论 -
设计模式之观察者模式
一句话总结我的理解当我发生改变时调用你(或你们)统一的方法通知你(你们)解释:这里的“我”是被观察者 ,“你(你们)” 是观察者为啥是我通知你们我改变了 观察一个东西是否改变有两种方法 **用交作业举例子** 1). 我写完了,告诉你 (只有写完时才触发) 2). 课代表过二分钟问你一下你写完没有(到点就触发) 如果是第二种过不了几分钟你就该骂骂咧咧了 (如果是多个课代表你骂骂咧咧的更快) 程序也一样原创 2022-01-06 11:15:36 · 156 阅读 · 0 评论 -
设计模式之命令模式
说实话这个模式挺令人纠结的,但从这个模式的定义上来看,有点让人摸不到什么头脑,而且查看资料以后会发现还是有点稀里糊涂的,说懂了吧也很简单,也不懂吧也有不懂的理由,于是查阅手头的各种书籍,在此写下心得体会,算是加深一下印象。命令模式的定义:将请求封装成一个对象,从而让用户使用不同的请求把客户端参数化,以及支持可撤销和恢复的功能。从定义上来看着实令人一脸懵逼,在这里描述一下博主个人的理解:请求:客户端要求系统执行的操作,在java的世界里面就是某个对象的方法。Command:请求封装成的对象,该对象是命原创 2022-01-04 16:24:37 · 1438 阅读 · 0 评论 -
设计模式之外观模式
定义提供一个高层次的接口,使得子系统更易于使用使用场景当你的程序有很多个模块,或者说子系统。你希望给用户提供一个统一的操作界面类,而不是让用户分别与这些模块交互。一种设计是:给用户提供一套面板方用来法完成一般性的功能,如果面板提供的方法不能满足用户需求,用户还可以直接使用具体模块的功能来达到自己的目的。另一种设计是:用户完全看不到各子模块,所有操作必须通过面板来完成,如果面板没有提供相应的功能,那也就gg了。如何使用1、客户端不需要知道系统内部的复杂联系,整个系统只需提供一个"接待员"即可原创 2021-10-20 18:10:32 · 123 阅读 · 0 评论 -
设计模式 组合模式
定义组合模式允许以相同的方式处理单个对象和对象的组合体使用场景当你的程序结构有类似树一样的层级关系时,例如文件系统,视图树,公司组织架构等等当你要以统一的方式操作单个对象和由这些对象组成的组合对象的时候。uml类图从上图可见组合模式共有3组成部分Component抽象类,定义统一的处理操作。Leaf叶子节点,即单个对象Composite组合对象,里面持有一个List。我们使用了组合模式中所谓的透明方式,因为我们将单个对象和组合对象按照完全一样的事物对待了,所以接口对外很透原创 2021-10-18 17:18:00 · 135 阅读 · 0 评论 -
设计模式 装饰者模式 其在JDK中的应用
定义装饰模式是在不必改变原类和使用继承的情况下,动态地扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象使用场景:需要扩展一个类的功能,或给一个类增加附加责任。需要动态地给一个对象增加功能,这些功能可以再动态地撤销。(个人理解 在不改变原来的类的情况下增加)需要增加由一些基本功能的排列组合而产生的非常大量的功能,从而使继承关系变得不现实。如何实现在上一篇 桥接模式 中提到星巴克咖啡系统项目。使用桥接模式实现了星巴克要求的各种下单功能:大杯原味、大杯加糖、大杯加奶;原创 2021-10-18 11:48:05 · 409 阅读 · 0 评论 -
设计模式 桥接模式 其在JDK中的应用
桥接模式定义桥接模式是将抽象部分与它的实现部分分离,使它们都可以独立地变化。它是一种对象结构型模式,又称为柄体(Handle andBody)模式或接口(Interfce)模式。使用场景桥我们大家都熟悉,顾名思义就是用来将河的两岸联系起来的。而此处的桥是用来将两个独立的结构联系起来,而这两个被联系起来的结构可以独立的变化,所有其他的理解只要建立在这个层面上就会比较容易。下面是一些官方的说明,如果一个系统需要在抽象化和具体化之间增加更多的灵活性,避免在两个层次之间建立静态的继承关系,通过原创 2021-10-14 18:55:04 · 354 阅读 · 0 评论 -
设计模式之适配器模式
概述由于面向对象程序设计本身就是从实际生活中汲取的灵感,将大千世界抽象到程序设计领域,所以所有的设计模式都是可以在日常生活中感受的到的。例如适配器模式,这个在日常生活中就太普遍了。例如我们程序员经常遇到的电脑上提供的端口与要插入的接头匹配不上,而我们则可以通过一个中间的适配器将两边连接起来。定义将一个接口转换为客户端所期待的接口,从而使两个接口不兼容的类可以在一起工作适配器模式还有个别名叫:Wrapper(包装器),顾名思义就是将目标类用一个新类包装一下,相当于在客户端与目标类直接加了一层。I原创 2021-10-12 17:55:26 · 135 阅读 · 0 评论 -
Java工厂模式-静态工厂
工厂模式1.简单工厂我的理解:只是把new对象交给了工厂,你给相应的参数工厂给你相应的值1.简单工厂简而言之,就是有一个专门生产某个产品的类。比如下图中的汽车工厂,专业生产汽车,给参数特斯拉,生产特斯拉汽车,给参数特斯拉,生产特斯拉。一个车工厂的接口public interface Car { void name();}二个汽车//比亚迪public class Bmw implements Car{ @Override public void name()原创 2020-09-24 20:02:31 · 138 阅读 · 0 评论 -
java 原型模式 浅克隆和 深克隆
java 原型模式Java原型模式 :通俗易懂的叫复制,通过复制得到一个一模一样的对象。浅克隆内容完全复制,如果存在引用类型的话指向的是同一个对象的(地址)原理图因为克隆是直接复制的对象的内容,当对象的成员是引用类型时(也就是传进来的是个地址)就会出现当引用的内容改变时复制对象和被复制对象的引用类型的值都会改变直接上代码```javapackage prototype;import javax.xml.crypto.Data;import java.util.Date;pub原创 2020-09-27 11:03:13 · 181 阅读 · 0 评论 -
枚举实现单例
/** 枚举单例模式** */public class SingletonExample { private SingletonExample() { } public static SingletonExample getInstance() { return Singleton.INSTANCE.getInstance(); } private enum Singleton { INSTANCE; pr.原创 2021-05-31 21:05:42 · 190 阅读 · 0 评论 -
设计模式 饿汉的两种写法
1. 静态代码块/*饿对象在静态代码块里 因为静态代码块里的代码优先加载而且只加载一次 *所以可以实现只有一个实例 */public class Animal { private static Animal instance; static { instance = new Animal(); } private Animal() {} public static Animal getInstance() { ret原创 2021-05-31 21:10:58 · 158 阅读 · 0 评论 -
建造者模式理解
定义定义虽然基本没有屌用,因为大部分人都看不懂,但是还的说出来。。。The intent of the Builder design pattern is to separate theconstruction of a complex object from its representation. By doing sothe same construction process can create different representations.将一个复杂对象的构建与其表示分离,使得同样转载 2021-10-11 18:09:04 · 191 阅读 · 0 评论 -
设计模式:简单工厂、工厂方法、抽象工厂之小结与区别
简单工厂,工厂方法,抽象工厂都属于设计模式中的创建型模式。其主要功能都是帮助我们把对象的实例化部分抽取了出来,优化了系统的架构,并且增强了系统的扩展性。1. 简单工厂简单工厂模式的工厂类一般是使用静态方法,通过接收的参数的不同来返回不同的对象实例。不修改代码的话,是无法扩展的。当想增加一个类比如说类C时 需要修改getProduct(string)的方法,不符合开闭原则2.工厂方法工厂方法是针对每一种产品提供一个工厂类。通过不同的工厂实例来创建不同的产品实例。在同一等级结构中,支持增加任意产原创 2021-10-09 16:23:47 · 125 阅读 · 0 评论