设计模式
文章平均质量分 62
Aeolian钦
这个作者很懒,什么都没留下…
展开
-
设计模式之责任链模式(完结)
基本介绍 为请求创建一个接收者对象的链,这种模式对请求的发送者和接收者进行解耦 责任链模式通常每个接收者都包含对另一个接收者的引用,如果一个对象不能处理该请求,那么它会把相同的请求传给下一个接收者,依次类推 属于行为型模式 责任链模式使多个对象都要机会处理请求,从而避免请求的发送者和接收者之间的耦合关系,将这个对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止 角色及职责 Handler:抽象的处理者,定义了一个处理请求的接口,同时含有另外Handler ConcreteHandler:原创 2021-09-26 22:10:09 · 96 阅读 · 0 评论 -
设计模式之策略模式
基本介绍 策略模式中,定义算法蔟,分别封装起来,让他们之间可以互相替换,此模式让算法的变化独立于使用算法的客户 这算法体系了几个设计原则,第一:把变化的代码从不变的代码中分离出来;第二:针对接口编程而不是具体类(定义了策略接口),第三:多用组合/聚合,少用继承(客户通过组合方式使用策略) 说明:客户context,有对应的策略接口,至于需要使用到那个策略,可以在构造器中指定 代码示例 策略接口 public interface FlyBehavior { void fly(); } 具体策略原创 2021-09-26 00:37:51 · 115 阅读 · 0 评论 -
设计模式之状态模式
基本介绍 主要是用来解决对象在多种状态转换时,需要对外输出不同的行为的问题,状态和行为是一一对应的,状态之间是可以相互转换的 当一个对象的内在状态改变时,允许改变其行为,这个对象看起来像是改变了其类 角色及职责 State:是状态接口角色,封装与Context的一个特定接口相关行为 ConcreteState:实现State接口,是具体的状态角色,每个子类实现一个于Context的一个状态相关行为。 Context:上下文对象,聚合State,用于维护ConcreteState的实例,这个实例定义当前原创 2021-09-26 00:33:01 · 80 阅读 · 0 评论 -
设计模式之解释器模式
基本介绍 在编译原理中,一个算术表达式通过词法分析器形成词法单元,而后这些词法单元在通过语法分析器构建语法分析树,最终形成一颗抽象的语法分析树,这里的词法分析器和语法分析器都可以看做是解释器 解释器模式:是指给定一个语言(表达式),定义它的文法的一种表示,并定义一个解释器,使用该解释器来解释语言中的句子(表达式) 应用场景 应用可以将一个需要解释执行的语言中的句子表示为一个抽象语法树 一些重复出现的问题可以用一种简单的语言来表达 一个简单语法需要解释的场景 这样的例子还有:编译器,运算表达式计算,正原创 2021-09-25 21:38:22 · 57 阅读 · 0 评论 -
设计模式之备忘录模式
当一个对象就对应一个保存对象状态的对象,当对象很多时,不利于管理,开销也很大,也就是说,简单的做个备份,new出另外一个对象,需要时在把备份的数据放到新对象中,这就暴露了对象内部的细节,解决方案就是使用备忘录模式 基本介绍 备忘录模式在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样以后就可将该对象恢复到原先保存的状态 可以这样理解:现实生活中的备忘录就是用来记录某些要去做的事情,或者是记录已经达到的共同意见的事情,以防忘记了。而在软件层面,备忘录模式有着相同的含义,备忘录对原创 2021-09-25 13:53:50 · 129 阅读 · 0 评论 -
设计模式之中介者模式
基本介绍 当多个对象状态发生改变时,相互之间的调用关系会比较复杂 各个对象彼此联系,你中有我,我中有你,不利于松耦合 用一个中介对象来封装一系列的对象交互。中介者使各个对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互 属于行为型模式,使代码易于维护 比如MVC模式,C是M和V的中介者,在前后端交互起到了中间人的作用 角色及职责 Mediator:抽象中介者,定义了同事到中介者对象的接口 Colleague:抽象的同事类 ConcreteMediator:具体的中介者对象,实原创 2021-09-24 01:08:27 · 67 阅读 · 0 评论 -
设计模式之观察者模式
原理 对象之间多对一依赖的一种设计方案,被依赖的对象为Subject,依赖的对象为Observer,Subject通知Observer编号 代码示例 天气变化,通知到第三方 Observer:观察者接口 public interface Observer { void update(float temperature,float pressure,float humidity); } Subject:第三方接入接口 public interface Subject { void regi原创 2021-09-22 22:36:23 · 54 阅读 · 0 评论 -
设计模式之迭代器模式
基本介绍 是常用的设计模式,属性行为型模式 如果我们的集合元素是用不同的方式实现的,有数组,还有java的集合类,或者还有其他方式,当客户端要遍历这些集合元素的时候就要使用多种遍历方式,而且还会暴露元素的内部结构,可以考虑使用迭代器模式解决 迭代器模式,提供一种遍历集合元素的统一接口,用一致的方法遍历集合元素,不需要知道集合对象的底层表示,即:不暴露其内部结构 角色及职责 Iterator:迭代器接口,是系统提供,含nextNext,next,remove ConcreteIterator:具体的迭代原创 2021-09-21 23:23:19 · 121 阅读 · 0 评论 -
设计模式之访问者模式
基本介绍 访问者模式:封装了一些作用于某种数据结构的各元素的操作,它可以在不改变数据结构的前提下定义作用于这些元素的新的操作 主要将数据结构与数据操作分离,解决数据结构和操作耦合性问题 访问者模式的基本工作原理是:在被访问的类里面加一个对外提供接待访问者的接口 应用场景:需要对一个对象结构中的对象进行很多不同操作(这些操作彼此没有关联),同时需要避免让这些操作“污染”这些对象的类,可以选用访问者模式解决 角色及职责 Visitor:是抽象访问者:为该对象结构中的ConcreteElement的每一个类原创 2021-09-21 21:50:47 · 70 阅读 · 0 评论 -
设计模式之命令模式
基本介绍 在软件设计模式中,我们经常需要向某个对象发送请求,但是并不知道请求的接收者是谁,也不知道被请求的操作是哪个,我们只需在程序运行时指定具体的请求接收者即可,此时,使用命令模式来进行设计 命令模式使的请求发送者与请求接收者消除彼此之间的耦合,让对象之间的调用关系更加灵活,实现解耦 在命令模式中会将一个请求封装成一个对象,以便使用不同参数来表示不同的请求,同时命令模式也支持可撤销的操作 通俗易懂的理解,将军发布命令,士兵去执行,其中有几个角色:命令发布者,命令的具体执行者,命令 Invoker是调用者原创 2021-09-21 14:31:27 · 65 阅读 · 0 评论 -
设计模式之模板方法模式
基本介绍 模板方法模式又叫模板模式,在一个抽象类公开定义了执行它的模板。它的子类可以按需要重写方法实现,但调用将以抽象类定义的方式进行 简单说,模板方非模式定义一个操作中的算法的骨架,而将一些步骤延迟到子类中,使的子类可以不改变一个算法的结果,就可以重定义该算法的某些特定步骤 这种设计模式属于行为型模式 角色及其职责 AbstractClass 抽象类,类中实现了模板方法,定义了算法的骨架,具体子类需要去实现其他的抽象方法 ConcreteClass实现了抽象方法,以完成算法中特定子类的步骤 代码示原创 2021-09-21 01:15:22 · 247 阅读 · 0 评论 -
设计模式之代理模式
基本介绍 为一个对象提供一个替身,以控制对这个对象的访问,即通过代理对象访问目标对象,这样做的好处是:可以在目标对象实现的基础上,增强额外的功能操作,即控制目标对象的功能 被代理的对象可以是远程对象。创建开销大的对象或需要安全控制的对象 代理模式有不同的形式,主要有三种:静态代理,动态代理和Cglib代理 静态代理 基本介绍 在使用时,需要定义接口或父类,被代理对象(即目标对象)与代理对象一起实现相同的接口或者是继承相同的父类 示例代码 被代理类接口 public interface ITeacherD原创 2021-09-20 23:02:09 · 66 阅读 · 0 评论 -
设计模式之享元模式
基本介绍 也叫蝇量模式:运用共享技术有效地支持大量细粒度的对象 常用于系统底层开发,解决系统的性能问题。像数据库连接池,里面都是创建好的连接对象,在这些连接对象中有我们需要的则直接拿来用,避免重复创建,如果没有我们需要的,则创建一个 享元模式能够解决重复对象的内存浪费的问题,当系统中有大量相似对象,需要缓存池时。不需要总是创建新对象,可以从缓冲池里拿,这样可以降低系统内存,同时提高效率 享元模式经典的应用场景就是池技术了,String常量池,数据库连接池,缓存池等等都是享元模式的应用,享元模式是池技术的重原创 2021-09-19 22:10:13 · 157 阅读 · 0 评论 -
设计模式之外观模式
基本介绍 又称过程模式:外观模式为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这个一子系统更加容易使用 外观模式通过定义一个一致的接口,用以屏蔽内部子系统的细节,使的调用端只需跟这个接口发生调用,而无需关心这个子系统的内部细节 角色分析 外观类(Facade):为调用端提供了统一的调用接口,外观类知道哪些子系统负责处理请求,从而将调用端的请求代理给适当子系统对象 调用者:外观接口的调用者 子系统的集合:指模块或者子系统:处理Facade对象指派的任务,他是功能的实际提供原创 2021-09-19 16:48:11 · 62 阅读 · 0 评论 -
设计模式之组合模式
基本介绍 又叫部分整体模式,它创建了对象组的树形结构,将对象组合成树形结构以表示“整体-部分”的层次关系 组合模式依据树形结构来组合对象,用来表示部分以及整体层次。 这种类型的设计模式属于结构型模式 组合模式使得用户对单个对象和组合对象的访问具有一致性,即:组合能让客户以一致的方式处理个别对象以及组合对象 组合模式角色及职责 Component:这是组合中的一个对象声明接口,在适当的情况下实现所有类共用的接口默认行为,用于访问和管理Component子部件,Component可以是抽象类或者接口 Le原创 2021-09-17 23:45:55 · 79 阅读 · 0 评论 -
设计模式之装饰者模式
基本介绍 装饰者模式:动态的将新功能附加到对象上,在对象功能扩展方面,它比继承更具有弹性,装饰者模式也体现了开闭原则 结构 装饰者模式就像打包一个快点 主体:被装饰者 包装:装饰者 模拟场景:咖啡,加配料 分几个部分 1.Drink:抽象类,包含描述和价格,加上计算价格的抽象方法 2.Drink抽象实现类:被装饰者 3.Decorator:实现了Drink,并且组合了Drink,装饰者 Drink: public abstract class Drink { public String des原创 2021-09-16 23:47:07 · 62 阅读 · 0 评论 -
设计模式之桥接模式
基本介绍 桥接模式是指:将实现与抽象放在两个不同的类层次中,使两个层次可以独立改变 是一种结构型设计模式 基于类的最小设计原则,通过使用封装、聚合及继承等行为让不同的类承担不同的职责。它的主要特点是把抽象与行为实现分离开来,从而可以保持各部分的独立性以及应对他们的功能扩展 角色: Client:桥接模式的调用者 抽象类(Abstraction):维护了Implementor/即他的实现类,二者是一个聚合的关系,Abstraction 充当了桥接类 RefinedAbstraction:是Abstrac原创 2021-09-14 23:26:47 · 103 阅读 · 0 评论 -
设计模式之适配器模式
基本介绍 适配器模式:将某个类的接口转换成客户端期望的另一个接口表示:主要目的是兼容性,让原本因接口不匹配不能一起工作的两个类可以协同工作。其别名为包装器 适配器属于结构型模式 主要分三类:类适配器模式,对象适配器模式,接口适配器模式 适配器工作原理 适配器模式:将一个类的接口转换成另一种接口,让原本接口不兼容的类可以兼容 从用户的角度看不到被适配者,是解耦 用户调用适配器转换出来的目标接口方法,适配器再调用被适配者的相关接口方法 用户收到反馈接口,感觉只是和目标接口交互 类适配器 注意事项和细节原创 2021-09-14 00:34:59 · 64 阅读 · 0 评论 -
设计模式之建造者模式
基本介绍 又称生成器模式,是一种对象构建模式,他可以将复杂的建造过程抽象出来(抽象类别),使这个抽象工厂的不同实现方法可以构造出不同表示(属性)的对象 建造者模式是一步一步创建一个复杂的对象,它允许用户只通过指定复杂对象的类型和内容就可以构建它们,用户不需要指定内部的具体构建过程 四个角色 Product(产品角色):一个具体的产品对象 Builder(抽象建造者):创建一个Product对象的各个部件指定的接口 ConcreteBuilder(具体建造者):实现接口,构建和装配各个部件 Direct原创 2021-09-12 22:59:03 · 65 阅读 · 0 评论 -
设计模式之原型模式
原型模式 基本介绍 原型模式是指:用原型实例指定创建对象的种类,并且提供拷贝这些原型,创建新的对象 是一种创建型设计模式,允许一个对象再创建另外一个可定制的对象,无需知道如何创建的细节 工作原理:通过将一个原型对象传给那个要发动创建的对象,这个要发动创建的对象通过请求原型对象拷贝它们自己来实施创建,接对象.clone() 代码: public class Sheep implements Cloneable{ private String name; private int age;原创 2021-09-12 20:53:17 · 58 阅读 · 0 评论 -
设计模式之工厂模式
工厂模式 工厂模式分为三种:简单工厂模式,工厂方法模式,抽象工厂模式 我们模拟一个披萨的场景,不同口味的披萨 传统模式 首先创建一个披萨的抽象类,因为原材料的不同,做成一个抽象披萨,由具体的子类实现 public abstract class Pizza { protected String name; /** * 准备原材料,做成抽象,因为他不一样 */ public abstract void prepare(); public void back原创 2021-09-12 00:37:39 · 47 阅读 · 0 评论 -
设计模式之单例模式
基本介绍 什么是单例模式?在正常情况下,我们创建对象是使用new来进行创建,这样创建会产生多个实例,使用单例模式,类从始至终只能有一个实例,这样能很大程度的减少系统资源的浪费。 所以在单例模式下,我们是不会使用new来创建对象的,所以我们会将构造方法私有化 单例模式由多种方式 1.饿汉式 2.懒汉式 3.双重检查 4.静态内部类 5.枚举 饿汉式 饿汉式是单例模式的一种,他的主要特点是写法简单,在类装载的时候就创建了对象,避免了线程同步的问题,他有两种写法 写法1: public class Singlet原创 2021-09-11 16:50:57 · 59 阅读 · 0 评论