设计模式
文章平均质量分 77
keydous
笔记而已
展开
-
CGLIB动态代理
CGLIB动态代理 JDK的动态代理必须提供接口才能使用,但是一些情况下是没有接口的,只能采用第三方技术了,比如CGLIB动态代理。它的优势在于不需要提供接口,只要一个非抽象类即可实现动态代理。 什么是CGLIB CGLIB是一个功能强大,高性能的代码生成包。它为没有实现接口的类提供代理,为JDK的动态代理提供了很好的补充。通常可以使用Java的动态代理创建代理,但当要代理的类没有实现接口或者为了...原创 2020-04-05 19:47:46 · 114 阅读 · 0 评论 -
Java动态代理
动态代理 Java的动态代理有两种: JDK的动态代理 CGLIB动态代理 之所以学动态代理,是为了更好理解Spring AOP的原理。动态代理是代理模式的一种,代理模式的定义和优点我就不说了。 先学一学JDK的动态代理 基于JDK的动态代理 我们用代码来说话 //基础接口 public interface BaseBehavior { void eat(String... food...原创 2020-02-29 20:43:20 · 116 阅读 · 0 评论 -
设计模式之解释器模式
11. 解释器模式 定义: 给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。 使用场景: 可以将一个需要解释执行的语言中的句子表示为一个抽象语法树。 一些重复出现的问题可以用一种简单的语言来表达。 一个简单语法需要解释的场景。 正则表达式、编译器、机器人等等。 UML: AbstractExpression:在抽象表...原创 2020-02-21 16:00:12 · 164 阅读 · 0 评论 -
设计模式之中介者模式
中介者模式 定义: 用一个中介者对象封装一系列的对象交互,中介者使各对象不需要显示地相互作用,从而使耦合松散,而且可以独立地改变它们之间的交互。 使用场景: 一般来说,只有对于那种同事类之间是网状结构的关系,才会考虑使用中介者模式。可以将网状结构变为星状结构,使同事类之间的关系变的清晰一些。 当有多个对象彼此间相互交互的时候,自然就会想到对象间的耦合度过高,解决办法就是封装对...原创 2020-02-21 11:43:34 · 90 阅读 · 0 评论 -
设计模式之访问者模式
访问者模式 定义: 提供一个作用于某种对象结构上的各元素的操作方式,可以使我们在不改变元素结构的前提下,定义作用于元素的新操作。如果系统的数据结构是比较稳定的,但其操作(算法)是易于变化的,那么使用访问者模式是个不错的选择;如果数据结构是易于变化的,则不适合使用访问者模式。 使用场景: 一个对象结构包含很多类对象,它们有不同的接口,而你想对这些对象实施一些依赖与其具体类的操作...原创 2020-02-21 11:40:18 · 88 阅读 · 0 评论 -
设计模式之状态模式
状态模式 状态模式和策略模式: 策略模式的具体子类之间没有交互,而状态模式的具体子类直接有交互,为的是状态的切换。 策略模式的环境角色只是一个委托作用,负责算法的替换,而状态模式的环境角色不仅仅是委托的作用,还负责记录状态变化,与具体的状态类协作,共同完成状态类的切换。 策略模式的重点是为了解决内部算法如何改变的问题,也是将内部算法的改变对外界的影响降到最小,保证算法自由切换,而状态模式解...原创 2020-02-21 11:12:47 · 122 阅读 · 0 评论 -
设计模式之备忘录模式
备忘录模式 备忘录模式和原型模式: 备忘录模式是保存对象当时的信息 , 而原型模式是调用clone()方法进行对象的克隆 , 所以我认为可以将备忘录模式进行修改 , 保存对象信息可以直接使用clone()克隆对象 , 然后保存到备忘录中 , 但是这就涉及到浅拷贝和深拷贝的问题 , 如果我们的 “发起人类” (Originator) 内部引用类型稍微复杂的话 , 建议不去使用clone(...原创 2020-02-20 19:14:52 · 126 阅读 · 0 评论 -
设计模式之命令模式
命令模式 定义: 将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。是一种数据驱动的设计模式,它属于行为型模式,请求以命令的形式包裹在对象中,并传给调用对象。调用对象寻找可以处理该命令的合适的对象,并把该命令传给相应的对象,该对象执行命令。 使用场景: 系统需要将请求调用者和请求接收者解耦,使得调用者和接收者...原创 2020-02-20 19:01:03 · 119 阅读 · 0 评论 -
设计模式之责任链模式
责任链模式 定义: 为了避免请求发送者与多个请求处理者耦合在一起,将所有请求的处理者通过前一对象记住其下一个对象的引用而连成一条链;当有请求发生时,可将请求沿着这条链传递,直到有对象处理它为止。在责任链模式中,客户只需要将请求发送到责任链上即可,无须关心请求的处理细节和请求的传递过程,所以责任链将请求的发送者和请求的处理者解耦了。 使用场景: 有多个对象可以处理一个请求,哪个...原创 2020-02-20 18:36:14 · 80 阅读 · 0 评论 -
设计模式之迭代子模式
迭代子模式 定义: 迭代子模式又叫游标模式,是对象的行为模式。迭代子模式可以顺序的访问一个聚集中的元素而不必暴露聚集的内部表象。迭代子模式具有两种实现方式,分别为白箱聚集于外禀迭代子和黑箱聚集于内禀迭代子。 白箱聚集于外禀迭代子:如果一个聚集的接口提供了可以用来修改聚集元素的方法,这个接口就是所谓的宽接口。如果聚集对象为所有对象提供同一个接口,也就是宽接口的话,当然会满足迭代子模式...原创 2020-02-18 11:20:51 · 716 阅读 · 1 评论 -
设计模式之观察者模式
观察者模式 定义: 定义对象间的一种一对多依赖关系,使得每当一个对象状态发生改变时,其相关依赖对象皆得到通知并被自动更新。观察者模式又叫做发布-订阅模式、模型-视图模式、源-监听器(Source/Listener)模式或从属者模式。 使用场景: 一个抽象模型有两个方面,其中一个方面依赖于另一个方面。将这些方面封装在独立的对象中使它们可以各自独立地改变和复用。 一个对象的...原创 2020-02-15 18:45:00 · 170 阅读 · 0 评论 -
设计模式之模板方法模式
模板方法模型 模板方法模式和策略模式的区别: 模板方法模式更注重流程,而策略模式更注重算法间的替换,不影响客户端的使用。 模板方法就像链表,线上有许多的结点,结点内容可以改变。入口只有一个(也就是头节点)。 模板方法是局部替换,而策略模式是整体替换。 定义: 模板方法模式,定义一个操作中的算法骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重新定...原创 2020-02-15 18:43:11 · 95 阅读 · 0 评论 -
设计模式之策略模式
1. 策略模式 定义: 策略模式定义了一组算法,将它们逐个封装起来,并使它们可以相互替换。策略可以让算法独立于使用它们的客户而变化。策略模式主要的目的是将算法的定义和使用分开,也就是将算法的行为和环境分开,因此算法可以重用。 使用场景: 如果在一个系统里面有许多类,它们之间的区别仅在于它们的行为,那么使用策略模式可以动态地让一个对象在许多行为中选择一种行为。 一个系统需要动态...原创 2020-02-15 18:41:56 · 116 阅读 · 0 评论 -
设计模式之享元模式
享元模式 定义: 运用共享技术有效地支持大量细粒度的对象。说到享元模式,第一个想到的应该就是池技术了,String常量池、数据库连接池、缓冲池等等都是享元模式的应用,所以说享元模式是池技术的重要实现方式。 因为要求细粒度对象,所以不可避免地会使对象数量多且性质相近,此时我们就将这些对象的信息分为两个部分:内部状态和外部状态。 内部状态指对象共享出来的信息,存储在享元对象内部并且不...原创 2020-02-11 20:24:19 · 139 阅读 · 0 评论 -
设计模式之组合模式
组合模式 定义: 组合模式组合多个对象形成树形结构以表示“整体-部分”的结构层次。组合模式对单个对象(叶子对象)和组合对象(组合对象)具有一致性,它将对象组织到树结构中,可以用来描述整体与部分的关系。同时它也模糊了简单元素(叶子对象)和复杂元素(容器对象)的概念,使得客户能够像处理简单元素一样来处理复杂元素,从而使客户程序能够与复杂元素的内部结构解耦。 叶子对象和组合对象实现相同...原创 2020-02-11 20:22:47 · 106 阅读 · 0 评论 -
设计模式之桥接模式
桥接模式 定义: 将抽象部分与它的实现部分分离,使它们都可以独立地变化。更容易理解的表述是:实现系统可从多种维度分类,桥接模式将各维度抽象出来,各维度独立变化,之后可通过聚合,将各维度组合起来,减少了各维度间的耦合。 使用场景: “抽象部分”和“实现部分”可以以继承的方式独立扩展而互不影响,在程序运行时可以动态将一个抽象化子类的对象和一个实现化子类的对象进行组合,即系统需要对...原创 2020-02-11 15:11:32 · 105 阅读 · 0 评论 -
设计模式之外观模式
外观模式 定义: 是一种通过为多个复杂的子系统提供一个一致的接口,而使这些子系统更加容易被访问的模式。该模式对外有一个统一接口,外部应用程序不用关心内部子系统的具体的细节,这样会大大降低应用程序的复杂度,提高了程序的可维护性。 使用场景: 当要为一个复杂子系统提供一个简单接口时可以使用外观模式。该接口可以满足大多数用户的需求,而且用户也可以越过外观类直接访问子系统。 客户程序...原创 2020-02-08 22:56:43 · 113 阅读 · 0 评论 -
设计模式之代理模式
代理模式 定义: 又叫委派模式,给目标对象提供一个代理对象,并由代理对象控制对目标对象的引用。简而言之,就是一种访问目标对象的方式,通过代理对象实现对目标对象的使用,同时也控制了外界对目标对象的访问。通俗来讲就是我们现实中的中介。 使用场景: 代理模式一般可以分为两种,动态代理和静态代理。 代理类主要是负责为委派类预处理消息、过滤消息、把消息传送给委派类,以及事后对结果的处理。...原创 2020-02-08 22:53:13 · 75 阅读 · 0 评论 -
设计模式之装饰者模式
装饰者模式 透明和半透明 在实际开发过程中,由于新增的行为可能需要单独使用,所以装饰者模式分为两种。 半透明模式:为了能够调用新增加的行为,要用具体类型来定义修改后的对象,而具体构件类型还是可以使用抽象构件类型来定义。 透明模式:要求客户端完全针对抽象编程,透明性对客户端要求对象声明不应该为具体构件类型或者具体装饰类型,应该全部声明为抽象构件类型。 半透明装饰模式可以给系统...原创 2020-02-08 22:49:34 · 150 阅读 · 0 评论 -
设计模式之适配器模式
适配器模式 定义: 将一个接口转换成客户希望的另一个接口,使接口不兼容的那些类可以一起工作,别名为包装器(Wrapper)。适配器模式既可以作为类结构型模式,也可以作为对象结构型模式。 适配者模式中,通过增加一个新的适配器类来解决接口不兼容问题,使得原本没有任何关系的类可以协同工作。 根据适配器类和适配者类的关系不同,适配器模式可以分为对象适配器和类适配器两种,在对象适配器...原创 2020-02-08 16:14:57 · 96 阅读 · 0 评论 -
设计模式之原型模式
原型模式 深克隆和浅克隆: Clone在Java中是一种常见的操作,目的是为了获取对象的副本。所以就产生了两种克隆方式(深克隆、浅克隆)。 深克隆:深克隆其实就是复制出一个对象的副本(分配内存,复制粘贴),也就是创建了一个和原来一样的对象,属性中的引用也就变成了副本的地址,不会指向原对象。 浅克隆:顾名思义,就是不会去分配内存来创建新的对象,而是依旧使用原对象,属性中的引用指向原对象...原创 2020-02-07 10:54:29 · 106 阅读 · 0 评论 -
设计模式之建造者模式
建造者模式 疑问: 建造者模式和抽象工厂模式的区别: 建造者模式所有函数加到一起才能生成一个对象,抽象工厂一个函数生成一个对象。 建造者模式就像如今的全球化分工合作,而抽象工厂更像是现在工厂的生产线,一条流水线生产出一种产品。 定义: 将一个复杂对象的构建和它的表示分离,使用同样的构建可以创建不同的表示。从定义来看,建造者模式适合于一个复杂对象的建造,而在建...原创 2020-02-05 14:03:09 · 125 阅读 · 0 评论 -
设计模式之单例模式
单例模式 定义: 确保某一个类只有一个实例,而且自动实例化并向整个系统提供这个实例。 使用场景: 对于一些特定的场景,必须使用单例模式,例如:唯一序列号生成、定义静态方法和常量、共享访问点或者共享数据的场合。 UML: Singleton:单例类,只能通过getInstance()方法获取唯一实例对象。 优点: 单例模式的类在创建和销毁时,减少...原创 2020-02-02 22:13:36 · 96 阅读 · 0 评论 -
设计模式之抽象工厂模式
抽象工厂模式 定义: 定义一个用于创建对象的接口,让子类决定实例化哪一个类。抽象工厂模式是所有工厂模式中最为抽象和最具一般性的一种形态。 抽象工厂模式是所有工厂模式中最一般的形式,当抽象工厂模式退化到只有一个产品等级结构时,就变成了工厂方法模式;当工厂方法模式的工厂类只有一个时,且工厂方法为静态方法时,就变成了简单工厂模式。 使用场景: 提供了一个创建一系列相关或相互依赖...原创 2020-01-27 19:09:47 · 140 阅读 · 0 评论 -
设计模式六大原则
设计模式的六大原则 1. 总原则:开闭原则(OCP) 开闭原则是说软件实体对扩展开放,而对修改关闭,即软件实体应尽量在不修改源码的基础上进行扩展。 实现开闭原则的关键就是抽象化,并且从抽象化中导出具体化的实现。 总的来说,开闭原则提高了系统的可维护性和代码的重用性。 无论模块是多么的封闭,都会存在一些无法对之封闭的变化。既然不能完全封闭,设计人员必须对于他设计的模块应该对哪些变化封闭做出选择。...原创 2020-01-19 22:11:33 · 113 阅读 · 0 评论 -
设计模式之工厂方法模式
1. 工厂方法模式 定义: 工厂方法模式也称为工厂模式,虚拟构造器模式,多态模式,通过定义工厂父类负责定义创建对象的公共接口,而子类则负责生成具体的对象。 使用场景: 工厂方法模式中,父类负责定义创建对象的公共接口,而子类则负责生成具体的对象,这样的目的是 将类的实例化操作延迟到子类中完成,由子类来决定实例化哪一个类。 UML: Produ...原创 2020-01-17 20:39:02 · 197 阅读 · 0 评论