
Java-设计模式分录
文章平均质量分 83
Java-设计模式分录
yueerba126
刚满十八岁
展开
-
设计模式-5.11解释器模式
如上图,设计一个软件用来进行加减计算。我们第一想法就是便用工具类,提供对应的加法和减法的工具方法上面的形式比较单一、有限,如果形式变化非常多,这就不符合要求,国为加法和减法运算,两个运算符与数值可以有无限种组台方式。比如 1+2+3+4+5、1+2+3-4等等显然,现在需要一种翻译识别机器,能够解析由数字以及 ±符号构成的合法的运算序列。如果把运算符和数字都看作节点的话,能够逐个节点的进行读取解析运算,这就是解释器模式的思维。原创 2023-07-14 09:02:27 · 80 阅读 · 0 评论 -
设计模式-5.10备忘录模式
备忘录模式提供了一种状态恢复的实现机制,使得用户可以方便地回到一个特定的历史步骤,当新的状态无效或者存在问题时,可以使用暂时存储起来的备忘录将状态复原,很多软件都提供了撤销(Undo) 操作,如Word、记事本、Photoshop、IDEA等软件在编辑时按 Ctrl+Z 组合键时能销当前操作,使文档恢复到之前的状态,还有在 浏览器 中的后退键、数据库事务管理中的回滚操作、玩游戏时的中间结果存档功能、数据库与操作系统的备份操作、棋类游戏中的悔棋功能等都属于这类。原创 2023-07-14 09:02:46 · 77 阅读 · 0 评论 -
设计模式-5.9访问者模式
(对象结构角色)封装一些对某种数据结构(具体元素角色)中各元素的操作,它可以在不改变这个数据结构的前提下定义作用于这些元素的新的操作。原创 2023-07-14 09:03:05 · 73 阅读 · 0 评论 -
设计模式-5.8迭代器模式
提供一个对象来顺序访问聚合对象中的一系列数据,而不暴露聚合对象的内部表示。原创 2023-07-14 09:03:23 · 69 阅读 · 0 评论 -
设计模式-5.7中介者模式
一般来说,同事类之间的关系是比较复杂的,多个同事类之间互相关联时,他们之间的关系会呈现为复杂的网状结构,这是一种过度耦合的架构,即不利于类的复用,也不稳定。例如在下左图中,有六个同事类对象,假如对象1发生变化,那么将会有4个对象受到影响。如果对象2发生变化,那么将会有5个对象受到影响。也就是说,同事类之间直接关联的设计是不好的。如果引入中介者模式,那么同事类之间的关系将变为星型结构,从下右图中可以看到,任何一个类的变动只会影响的类本身,以及中介者,这样就减小了系统的耗合。原创 2023-07-14 09:03:52 · 71 阅读 · 0 评论 -
设计模式-5.6观察者模式
又被称为发布-订说(Publish/Subscribe) 模式,它定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态变化时,会通知所有的观察者对象,使他们能够自动更新自己.原创 2023-07-14 09:04:13 · 84 阅读 · 0 评论 -
设计模式-5.5状态模式
例]通过按钮来控制一个电梯的状态,一个电梯有开门状态,关门状态,停止状态,运行状态。每一种状态改变,都有可能要根据其他状态来更新处理。例如,如果电梯门现在处于运行时状态,就不能进行开门操作,而如果电梯门是停止状态,就可以执行开门操作/*** @Description: 电梯接口*///定义四个电梯状态的常量//设置电梯状态的功能//电梯操作功能void run();/*** @Description: 电梯类(ILift的子实现类)*/原创 2023-07-14 09:04:30 · 80 阅读 · 0 评论 -
设计模式-5.4责任链模式
在现实生活中,常常会出现这样的事例:一个请求有多个对象可以处理,但每个对象的处理条件或权限不同。例如,公司员工请假,可批假的领导有部门负责人、副总经理、总经理等,但每个领导能批准的天数不同员工必须根据自己要请假的天数去找不同的领导签名,也就是说员工必须记住每个领导的姓名、电话和地址等信息,这增加了难度。这样的例子还有很多,如找领导出差报销、生活中的“击鼓传花”游戏等.原创 2023-07-15 21:26:50 · 94 阅读 · 0 评论 -
设计模式-5.3命令模式
例] 快餐店日常生活中,我们出去吃饭都会遇到下面的场景将一个请求封装为一个对象,使发出请求的责任和执行请求的责任分割开。这样两者之间通过命令对象进行沟通,这样方便将命令对象进行存储、传递、调用、增加与管理。原创 2023-07-15 21:27:15 · 78 阅读 · 0 评论 -
设计模式-5.2策略模式
该模式定义了一系列算法,并将每个算法封装起来,使它们可以相互替换,且算法的变化不会影响使用算法它通过对算法进行封装,把使用算法的责任和算法的实现分割开来,并委的客户。策略模式属于对象行为模式,派给不同的对象对这些算法进行管理。原创 2023-07-15 21:27:38 · 85 阅读 · 0 评论 -
设计模式-5.1模板方法模式
在面向对象程序设计过程中,程序员常常会遇到这种情况:设计一个系统时知道了算法所需的关键步骤,而且确定了这些步骤的执行顺序,但某些步骤的具体实现还未知,或者说某些步骤的实现与具体的环境相关。例如,去银行办理业务一般要经过以下4个流程:取号、排队、办理具体业务、对银行工作人员进行评分等其中取号、排队和对银行工作人员进行评分的业务对每个客户是一样的,可以在父类中实现,但是办理具体业务却因人而异,它可能是存款、取款或者转账等,可以延迟到子类中实现。原创 2023-07-15 21:27:53 · 83 阅读 · 0 评论 -
设计模式-4.7享元模式
运用共享技术来有效地支持大量细粒度对象的复用。它通过共享已经存在的对象来大幅度减少需要创建的对象数量、避免大量相似对象的开销,从而提高系统资源的利用率。原创 2023-07-14 09:01:57 · 77 阅读 · 0 评论 -
设计模式-4.6组合模式
对于这个图片肯定会非常熟悉,上图我们可以看做是一个文件系统,对于这样的结构我们称之为树形结构。在树形结构中可以通过调用某个方法来遍历整个树,当我们找到某个叶子节点后,就可以对叶子节点进行相关的操作。可以将这颗树理解成一个大的容器,容器里面包含很多的成局对象,这些成局对象即可是容器对象也可以是叶子对象。但是由于容器对象和叶子对象在功能上面的区别,使得我们在使用的过程中必须要区分容器对象和叶子对象,但是这样就会给客户带来不必要的麻烦,作为客户而言,它始终希望能够一致的对待容器对象和叶子对象。原创 2023-07-14 09:01:38 · 85 阅读 · 0 评论 -
设计模式-4.5外观模式
有些人可能炒过股票,但其实大部分人都不太懂,这种没有足够了解证券知识的情况下做股票是很容易亏钱的,刚开始炒股肯定都会想,如果有个懂行的帮帮手就好,其实基金就是个好帮手,支付宝里就有许多的基金它将投资者分散的资金集中起来,交由专业的经理人进行管理,投资于股票、债券、外汇等领域,而基金投资的收益归持有者所有,管理机构收取一定比例的托管管理费用又名门面模式,是一种通过为多个复杂的子系统提供一个一致的接口,而使这些子系统更加容易被访问的模式。原创 2023-07-14 09:01:16 · 85 阅读 · 0 评论 -
设计模式-4.4桥接模式
现在有一个需求,需要创建不同的图形,并且每个图形都有可能会有不同的颜色。我们可以利用继承的方式来设计类的关系:我们可以发现有很多的类,假如我们再增加一个形状或再增加一种颜色,就需要创建更多的类试想,在一个有多种可能会变化的维度的系统中,用继承方式会造成类爆炸,扩展起来不灵活。每次在一个维度上新增一个具体实现都要增加多人子类。为了更加灵活的设计系统,我们此时可以考虑使用桥接模式。将抽象与实现分离,使它们可以独立变化。它是用组合关系代替继承关系来实现,从而降低了抽象和实现这两个可变维度的耦合度。原创 2023-07-13 16:51:12 · 79 阅读 · 0 评论 -
设计模式-4.3装饰者模式
我们先来看一个快餐店的例子快餐店有炒面、炒饭这些快餐,可以额外附加鸡蛋、火腿、培根这些配菜,当然加配菜需要额外加钱,每个配菜的价钱通常不太一样,那么计算总价就会显得比较麻烦。使用继承的方式存在的问题扩展性不好如果要再加一种配料(火腿肠),我们就会发现需要给FriedRice和FriedNoodles分别定义一个子类。如果要新增一个快餐品类(炒河粉) 的话,就需要定义更多的子类产生过多的子类指在不改变现有对象结构的情况下,动态地给该对象增加一些职责(即增加其外功能)的模式。原创 2023-07-13 16:49:03 · 91 阅读 · 0 评论 -
设计模式-4.2适配器模式
如果去欧洲国家去旅游的话,他们的插座如下图最左边,是欧洲标准。而我们使用的插头如下图最右边的。因此我们的笔记本电脑,手机在当地不能直接充电。所以就需要一个插座转换器,转换器第1面插入当地的插座,第2面供我们充电,这样使得我们的插头在当地能使用。生活中这样的例子很多,手机充电器(将220V转换为5V的电压),读卡器等,其实就是使用到了适配器模式将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类能一起工作。原创 2023-07-13 16:47:32 · 96 阅读 · 0 评论 -
设计模式-4.1代理模式
由于某些原因需要给某对象提供一个代理以控制对该对象的访问。这时,访问对象不适合或者不能直接引用目标对象,代理对象作为访问对象和目标对象之间的中介。Java中的代理按照代理类生成时机不同又分为静态代理和动态代理。静态代理代理类在编译期就生成,动态代理代理类则是在Java运行时动态生成。动态代理又有JDK代理和CGLib代理两种。原创 2023-07-13 16:45:36 · 95 阅读 · 0 评论 -
设计模式-3.4生成器模式
定义:封装一个复杂对象构造过程,并允许按步骤构造。定义解释: 我们可以将生成器模式理解为,假设我们有一个对象需要建立,这个对象是由多个组件(Component)组合而成,每个组件的建立都比较复杂,但运用组件来建立所需的对象非常简单,所以我们就可以将构建复杂组件的步骤与运用组件构建对象分离,使用builder模式可以建立。原创 2023-07-13 16:40:08 · 112 阅读 · 0 评论 -
设计模式-3.3原型模式
原型模式包含如下角色抽象原型类: 规定了具体原型对象必须实现 clone 方法具体原型类: 实现抽象原型类的 clone 方法,它是可被复制的对象访问类: 使用具体原型类中的 clone 方法来复制新的对象。原创 2023-07-13 16:38:13 · 134 阅读 · 0 评论 -
设计模式-3.2工厂模式
Collection接口是抽象工厂类,ArrayList是具体的工厂类;lterator接口是抽象商品类,ArrayList类中的iterator内部类是具体的商品类。在具体的工厂类中iterator方法创建具体的商品类的对象。在开发中也有一部分人将工厂类中的创建对象的功能定义为静态的,这个就是静态工厂模式,它也不是23种设计模式中的。抽象工厂 :用来生产不同产品族的全部产品。简单工厂 :用来生产同一等级结构中的任意产品。工厂方法 :用来生产同一等级结构中的固定产品。(支持拓展增加产品)原创 2023-07-13 16:36:29 · 83 阅读 · 0 评论 -
设计模式-3.1单例模式
1. 饿汉式: 类加载就会导致该单实例对象被创建2. 懒汉式: 类加载不会导致该单实例对象被创建,而是首次使用该对象时才会创建(这就是懒加载)3. 枚举方式(推荐): 枚举类型是线程安全的,并且只会装载一次,枚举的写法非常简单,可以利用枚举的特性来解决线程安全和单一实例的问题, 还可以可以防止反射和反序列化对单例的破坏,而且枚举类型是所用单例实现中唯一一种不会被破坏的单例实现模式。原创 2023-07-13 16:33:05 · 83 阅读 · 0 评论