
设计模式
文章平均质量分 54
小望没烦恼
这个作者很懒,什么都没留下…
展开
-
设计模式之迭代器模式
在现实生活以及程序设计中,经常要访问一个聚合对象中的各个元素,如数据结构中的链表遍历,通常的做法是将链表的创建和遍历都放在同一个类中,但这种方式不利于程序的扩展,如果要更换遍历方法就必须修改程序源代码。迭代器模式能较好地克服以上缺点,它在客户访问类与聚合类之间插入一个迭代器,这分离了聚合对象与其遍历行为,对客户也隐藏了其内部细节。迭代器(Iterator)模式的定义:提供一个对象来顺序访问聚合对象中的一系列数据,而不暴露聚合对象的内部表示。应用场景当需要为聚合对象提供多种遍历方式时。当需要为遍.原创 2021-06-20 14:48:12 · 119 阅读 · 0 评论 -
设计模式之责任链模式
在现实生活中,一个事件需要经过多个对象处理是很常见的场景。例如,采购审批流程、请假流程等。公司员工请假,可批假的领导有部门负责人、副总经理、总经理等,但每个领导能批准的天数不同,员工必须根据需要请假的天数去找不同的领导签名,也就是说员工必须记住每个领导的姓名、电话和地址等信息,这无疑增加了难度。责任链(Chain of Responsibility)模式的定义:为了避免请求发送者与多个请求处理者耦合在一起,于是将所有请求的处理者通过前一对象记住其下一个对象的引用而连成一条链;当有请求发生时,可将请求沿.原创 2021-06-20 10:26:04 · 224 阅读 · 0 评论 -
设计模式之模板方法模式
一个人每天会起床、吃饭、做事、睡觉等,其中“做事”的内容每天可能不同。我们把这些规定了流程或格式的实例定义成模板,允许使用者根据自己的需求去更新它,例如,简历模板、论文模板、Word 中模板文件等。模板方法(Template Method)模式的定义:定义一个操作中的算法骨架,而将算法的一些步骤延迟到子类中,使得子类可以不改变该算法结构的情况下重定义该算法的某些特定步骤。应用场景:算法的整体步骤很固定,但其中个别部分易变时,这时候可以使用模板方法模式,将容易变的部分抽象出来,供子类实现。当多个.原创 2021-06-19 09:56:19 · 102 阅读 · 0 评论 -
设计模式之桥接模式
桥接(Bridge)模式的定义:将抽象与实现分离,使它们可以独立变化。它是用组合关系代替继承关系来实现,从而降低了抽象和实现这两个可变维度的耦合度。应用场景:当一个类存在两个独立变化的维度,且这两个维度都需要进行扩展时。当一个系统不希望使用继承或因为多层次继承导致系统类的个数急剧增加时。当一个系统需要在构件的抽象化角色和具体化角色之间增加更多的灵活性时。模式组成:抽象化角色:定义抽象类,并包含一个对实现化对象的引用。扩展抽象化角色:是抽象化角色的子类,实现父类中的业务方法,并通过组合关系原创 2021-06-18 10:45:43 · 189 阅读 · 2 评论 -
设计模式之适配器模式
适配器模式(Adapter)的定义:将一个类的接口转换成另外一个接口,使得原本不能一起工作的那些类能一起工作。适配器模式分为类结构型模式和对象结构型模式两种,前者类之间的耦合度比后者高,且要求对现有组件库中的相关组件的内部结构比较了解,所以应用相对较少些。应用场景:以前开发的系统存在满足新系统功能需求的类,但其接口同新系统的接口不一致。使用第三方提供的组件,但组件接口定义和自己要求的接口定义不同。模式组成:目标接口:当前系统业务所期待的接口,它可以是抽象类或接口。适配者类:它是被访问和适配原创 2021-06-18 09:20:59 · 114 阅读 · 0 评论 -
设计模式之代理模式
代理模式的定义:给某对象提供一个代理以控制对该对象的访问。这时,访问对象不能直接引用目标对象,代理对象作为访问对象和目标对象之间的中介。应用场景:远程代理,这种方式通常是为了隐藏目标对象存在于不同地址空间的事实,方便客户端访问。例如,用户申请某些网盘空间时,会在用户的文件系统中建立一个虚拟的硬盘,用户访问虚拟硬盘时实际访问的是网盘空间。虚拟代理,这种方式通常用于要创建的目标对象开销很大时。例如,下载一幅很大的图像需要很长时间,因某种计算比较复杂而短时间无法完成,这时可以先用小比例的虚拟代理替换真实的原创 2021-06-17 19:03:09 · 92 阅读 · 0 评论 -
设计模式之建造者模式
建造者(Builder)模式的定义:指将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示,称为建造者模式。它是将一个复杂的对象分解为多个简单的对象,然后一步一步构建而成。它将变与不变相分离,即产品的组成部分是不变的,但每一部分是可以灵活选择的。例如lombok中@Builder使用了建造者模式。应用场景:相同的方法,不同的执行顺序,产生不同的结果。多个部件或零件,都可以装配到一个对象中,但是产生的结果又不相同。产品类非常复杂,或者产品类中不同的调用顺序产生不同的作用。初始化一原创 2021-06-17 14:15:24 · 105 阅读 · 0 评论 -
设计模式之工厂模式
文章目录简单工厂模式工厂方法模式抽象工厂模式工厂模式的定义:定义一个创建产品对象的工厂接口,将产品对象的实际创建工作推迟到具体子工厂类当中。按实际业务场景划分,工厂模式有 3 种不同的实现方式,分别是简单工厂模式、工厂方法模式和抽象工厂模式。简单工厂模式:把创建产品的对象称为工厂,被创建的对象称为产品。如果要创建的产品不多,只要一个工厂类就可以完成,这种模式叫简单工厂模式。工厂方法模式:是对简单工厂模式的进一步抽象化,可以使系统在不修改原来代码的情况下引进新的产品。抽象工厂模式:抽象工厂模式是工厂原创 2021-06-17 09:54:18 · 212 阅读 · 0 评论 -
设计模式之原型模式
文章目录优点和缺点应用场景原型模式的结构具体实现原型管理器原型(Prototype)模式的定义如下:用一个已经创建的实例作为原型,通过复制该原型对象来创建一个和原型相同或相似的新对象。用这种方式创建对象非常高效,根本无须知道对象创建的细节。优点和缺点原型模式的优点:Java自带的原型模式基于内存二进制流的复制,在性能上比直接 new 一个对象更加优良。可以使用深克隆方式保存对象的状态,使用原型模式将对象复制一份,并将其状态保存起来,简化了创建对象的过程,以便在需要的时候使用(例如恢复到历史某一状原创 2021-06-16 19:31:47 · 147 阅读 · 0 评论 -
设计模式之单例模式
文章目录优点和缺点应用场景单例模式的两种实现懒汉模式饿汉模式单例(Singleton)模式的定义:指一个类只有一个实例,且该类能自行创建这个实例的一种模式。单例模式有 3 个特点:单例类只有一个实例对象;该单例对象必须由单例类自行创建;单例类对外提供一个访问该单例的全局访问点。优点和缺点单例模式的优点:单例模式可以保证内存里只有一个实例,减少了内存的开销。可以避免对资源的多重占用。单例模式设置全局访问点,可以优化和共享资源的访问。单例模式的缺点:单例模式一般没有接口,扩展困原创 2021-06-16 14:56:12 · 102 阅读 · 0 评论 -
Netty中的责任链模式
责任链模式适用场景:对于一个请求来说,如果每个对象都有机会处理它,而且不明确到底是哪个对象会处理请求时,我们可以考虑使用责任链模式实现它,让请求从链的头部往后移动,直到链上的一个节点成功处理了它为止优点:发送者不需要知道自己发送的这个请求到底会被哪个对象处理掉,实现了发送者和接受者的解耦简化了发送者对象的设计可以动态的添加节点和删除节点缺点:所有的请求都从链的头部开始遍历,对性能有损耗极差的情况,不保证请求一定会被处理Netty中的应用netty的pipeline设计,就采用了责原创 2021-06-11 09:52:20 · 572 阅读 · 1 评论 -
双重校验锁方式实现单例模式
/** *双重校验锁方式实现单例模式 */public class Singleton { //静态实例变量 private volatile static Singleton uniqueInstance; // 私有化构造函数 private Singleton() { } // 静态public方法,向整个应用提供单例获取方式 public static Singleton getUniqueInstance() { //第一重原创 2021-04-19 19:43:02 · 342 阅读 · 0 评论