首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Java设计模式-装饰模式

装饰模式:简单的来说就是动态的给一个对象增加额外的功能,就单纯的新增功能来说会比单一的给一个子类新增功能来的灵活,是跟代理模式中的静态代理模式和动态代理模式十分相近,但是静态代理会使得代码非常臃肿,维护性比较差...,但是动态代理使用代理类,让代理类只是存在于内存当中运行,不需要产生具体的java文件,这样的模式会更加的优秀.接下来是本章的装饰模式 【本文使用lombok依赖,如果不想使用的可以直接使用setter...opeartion() { super.opeartion(); addedState ="New State"; System.out.println("具体的装饰对象...opeartion() { super.opeartion(); AddedBehavior(); System.out.println("具体装饰对象...B的操作"); } private void AddedBehavior(){ System.out.println("装饰B独有的方法"); } }

27010
您找到你想要的搜索结果了吗?
是的
没有找到

Java设计模式-装饰模式

定义 装饰模式:在不改变原类文件以及不使用继承的情况下,动态地将责任附加到对象上,从而实现动态拓展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。...原则 要使用装饰模式,需要满足以下设计原则: 多用组合,少用继承 开放-关闭原则:类应该对拓展开放,对修改关闭 UML类图 我们先来看看装饰模式的类图,再来详细讲述: [ni6gdcxwee.png...那么在这个例子里面,我们可以用装饰模式,把客户当做被装饰者,衣服是装饰者,这很直观形象吧,接着我们来一步步实现需求。...总结 以上就是装饰模式的一个小栗子,讲述了装饰者的基本用法。总结一下装饰模式的特点。 装饰者和被装饰者有相同的接口(或有相同的父类)。 装饰者保存了一个被装饰者的引用。...扩展阅读 学习了装饰模式用法、特点以及优缺点后,我们再来看看装饰模式在实际开发过程的应用。装饰模式Java中经常出现的地方就是JavaIO。

80430

java设计模式-装饰模式

模式定义 动态的将新功能附加到对象上,在对象功能扩展方面,它比继承更有弹性。 设计原则 多用组合,少用继承 类应设计的对扩展开放,对修改关闭。...UML类图 装饰模式实例 先写一个被装饰者食物的类 被装饰者-食物类 /** * 被装饰者-食物类 */ public class Food { private String foodName...装饰者-面包类 /** * 装饰者-面包类 */ public class Bread extends Food { private Food food; public Bread...-奶油类 /** * 装饰者-奶油类 */ public class Cream extends Food { private Food food; public Cream(Food...java.io中的装饰模式 总结 装饰者模型就是动态地添加更多功能的一种方式,是一种组合和委托的思想,但是会导致设计中出现许多小类,如果过度使用,会让程序变得很复杂,难以看明白。

35260

Java模式装饰(Decorator)模式

装饰模式使用被装饰类的一个子类的实例,把客户端的调用委派到被装饰类,装饰模式的关键在于这种扩展是完全透明的。...装饰模式Java种使用也很广泛,比如我们在重新定义按钮、对话框等时候,实际上已经在使用装饰模式了。装饰模式最浅显的例子是相片-相框的例子。 一、原理图 ?...其中类的职责如下: 抽象构件角色(Project):给出一个接口,以规范准备接收附加责任的对象 具体构件角色(Employe):定义一个将要接收附加责任的类 装饰角色(Manager):持有一个构件对象的实例...,并定义一个与抽象构件接口一致的接口 具体装饰角色(ManagerA、ManagerB):负责给构件对象“贴上”附加的责任 二、下面通过一个软件项目例子来说明装饰模式的使用 过程是这样的: 项目经理接到一个项目

54010

Java设计模式装饰模式

拿一个旧手机的线路板,找个新的外壳、屏幕、包装就成了新手机,装饰模式害人不浅呀! 我们不说不开心的事情,今天举一个什么例子呢?就说说我上小学的的糗事吧。...这还是一个比较简单的场景,一旦需要装饰条件非常的多,比如20个,你还通过继承来解决,你想想的子类有多少个?你是不是马上就要崩溃了!...这就是装饰模式装饰模式的通用类图如下: 看类图,Component是一个接口或者是抽象类,就是定义我们最核心的对象,也就是最原始的对象,比如上面的成绩单,记住在装饰模式中,必然有一个被提取出来最核心、...,那当然维护也不容易了,也就是说装饰模式可以替代继承,解决我们类膨胀的问题,你要知道继承是静态的给类增加功能,而装饰模式则是动态的给类增加功能,你看上面的那个例子,我不想要 SortDecorator...装饰模式可以给我们很好的帮助,通过装饰模式重新封装一个类,而不是通过继承来完成,简单点说,三个继承关系 Father,Son,GrandSon三个类,我要再 Son 类上增强一些功能怎么办?

1.7K10

java设计模式-装饰模式

模式定义 动态的将新功能附加到对象上,在对象功能扩展方面,它比继承更有弹性。 设计原则 多用组合,少用继承 类应设计的对扩展开放,对修改关闭。 UML类图 ?...装饰模式实例 先写一个被装饰者食物的类 被装饰者-食物类 /** * 被装饰者-食物类 */ public class Food { private String foodName;...装饰者-面包类 /** * 装饰者-面包类 */ public class Bread extends Food { private Food food; public Bread...-奶油类 /** * 装饰者-奶油类 */ public class Cream extends Food { private Food food; public Cream(Food...java.io中的装饰模式 ? 总结 装饰者模型就是动态地添加更多功能的一种方式,是一种组合和委托的思想,但是会导致设计中出现许多小类,如果过度使用,会让程序变得很复杂,难以看明白。

50640

JAVA 设计模式 装饰模式

用途 装饰模式 (Decorator) 动态地给一个对象添加一些额外的职责。就增加功能来说,Decorator 模式相比生成子类更为灵活。 装饰模式是一种结构式模式。...结构 图-装饰模式结构图 Component : 定义一个对象接口,可以给这些对象动态地添加职责。...要点 1、装饰对象和真实对象有相同的接口。这样客户端对象就能以和真实对象相同的方式和装饰对象交互。 2、装饰对象包含一个真实对象的引用(reference)。 3、装饰对象接受所有来自客户端的请求。...4、装饰对象可以在转发这些请求以前或以后增加一些附加功能。这样就确保了在运行时,不用修改给定对象的结构就可以在外部增加附加的功能。在面向对象的设计中,通常是通过继承来实现对给定类的功能扩展。...推荐 本文属于 JAVA设计模式系列 。 参考资料 《大话设计模式》《HeadFirst设计模式

54780

Java 设计模式 装饰模式

https://louluan.blog.csdn.net/article/details/19021803 装饰模式定义:   动态地将责任附加到对象上。...现在,我想将播放背景音乐和跳舞这两个装饰都用上,该怎么用呢?...2.如果这个选手比较有才,有五花八门的各种装饰,我们为此要增加相应多的装饰类;如果他在这方面有很深的造诣,把这些装饰发挥的淋漓尽致,能把这些装饰融合到一块,这些五花八门的装饰随机组合,这得要衍生多少个子类啊...通过这种装饰方式,我们可以很方便地根据具体情况增加修饰者,并且不会产生多余的子类,整个过程很灵活,不像单纯使用类继承的方式会产生很多子类。 ? 装饰模式 目的 给对象动态地添加附加功能。...easy to customize by those who understand them, they can be hard to learn and debug.在系统中采用Decorator设计模式的设计会产生很多看上去类似的小对象

39530

Java设计模式(七)----装饰模式

装饰模式 一、概述 二、装饰模式的结构 三、具体案列 四、装饰模式与类继承的区别 五、装饰模式的特点:...六、装饰模式、适配器模式、代理模式区别 一、概述 1.装饰模式(Decorator)的定义:又名包装(Wrapper)模式装饰模式以对客户端透明的方式扩展对象的功能,是继承关系的一个替代方案...2.装饰模式以对客户端透明的方式动态的给一个对象附加上更多的责任。换言之客户端并不会觉的对象在装饰前和装饰后有什么区别。 3.装饰模式可以在不创造更多的子类的模式下,将对象的功能加以扩展。...二、装饰模式的结构   装饰模式的类图如下: ?   在装饰模式中的角色有:   ●抽象构件(Component)角色:给出一个抽象接口,以规范准备接收附加责任的对象。   ...装饰模式特点在于增强,他的特点是被装饰类和所有的装饰类必须实现同一个接口,而且必须持有被装饰的对象,可以无限装饰。 代理模式的特点在于隔离,隔离调用类和被调用类的关系,通过一个代理类去调用。

73570

java设计模式(6)-装饰模式

上一篇文章分享了适配器模式,这篇推文整理一下装饰模式,和代理模式非常相似,但是实现和应用的场景不一样 装饰模式就是给一个对象增加一些新的功能,要求装饰对象(代理对象)和被装饰对象(真实类)实现同一个接口...,装饰对象持有被装饰对象的实例 public interface SourceAble { public void sourceMethod(); } 被装饰类(真实类): public class...; } } 装饰类(代理类): public class Decorate implements SourceAble { //private Source source;...总结: 装饰模式中,装饰类对被代理对象没有控制权,只能为其增加一层装饰,以加强被装饰对象的功能下一篇推文整理一下和装饰模式的进阶--代理模式--使用到极致开发就是SpringAOP的简单实现原理

32230

Java IO 装饰模式

装饰模式(Decorator)   装饰模式又名包装(Wrapper)模式。   装饰模式以对客户端透明的方式扩展对象的功能,是继承关系的一个替代方案。   ...装饰模式可以在不创造更多子类的情况下,将对象的功能加以扩展。   装饰模式把客户端的调用委派到被装饰类。装饰模式的关键在于这种扩展是完全透明的。...具体装饰角色(Concrete Decorator):负责给构件对象“贴上”附加的责任。 Java IO中的装饰模式   在IO中,具体构件角色是节点流,装饰角色是过滤流。   ...装饰模式的定义   装饰模式动态地将责任附加到对象上。若要扩展功能,装饰者提供了比继承更有弹性的替代方案。 装饰模式的实现   实现类图如下: ?   ...java.io包内的装饰模式   装饰模式的缺点:在设计中加入大量的小类,如果过度使用,会让程序变得复杂。

42320

Java装饰模式(decorator)

装饰模式(decorator)   装饰模式又称为包装模式(Wrapper),作用是用来动态的为一个对象增加新的功能。装饰模式是一种用于代替继承的技术,无须通过继承增加子类就能扩展对象的新功能。...Struts2中,request,response,session对象的处理 5.总结 装饰模式(Decorator)也叫包装器模式(Wrapper) 装饰模式降低系统的耦合度,可以动态的增加或删除对象的职责...,并使得需要装饰的具体构建类和具体装饰类可以独立变化,以便增加新的具体构建类和具体装饰类。...装饰模式易于出错,调试排查比较麻烦。 装饰模式和桥接模式的区别:   两个模式都是为了解决过多子类对象问题。但他们诱因不一样。桥模式是对象自身现有机制沿着多个维度变化,是既有部分不稳定。...装饰模式是为了增加新的功能。

28730

Java 设计模式(五)《装饰模式

装饰模式 装饰模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构。这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装。...这种模式创建了一个装饰类,用来包装原有的类,并在保持类方法签名完整性的前提下,提供了额外的功能。 更多设计模式小故事案例代码详解 >>点我!点我!点我!...就增加功能来说,装饰模式相比生成子类更为灵活。...简单来说 装饰模式可以在装饰器类中通过装饰,来动态的改变被装饰类的行为 维基百科这样说 在面向对象编程中,装饰模式是一种设计模式,它允许静态或动态地将行为添加到单个对象,而不影响来自同一类的其他对象的行为...优缺点 优点:装饰类和被装饰类可以独立发展,不会相互耦合,装饰模式是继承的一个替代模式装饰模式可以动态扩展一个实现类的功能。 缺点:多层装饰比较复杂。 注意事项:可代替继承。

44810

java设计模式装饰模式

就增加功能来说, Decorator模式相比生成子类更为灵活。该模式以对客 户端透明的方式扩展对象的功能。 2、适用环境 (1)在不影响其他对象的情况下,以动态、透明的方式给单个对象添加职责。...4.ConcreteDecorator(具体装饰者) 具体的装饰对象,给内部持有的具体被装饰对象,增加具体的职责。 4、类图 ?...(4)具体装饰:实现抽象装饰者角色,负责对具体构件添加额外功能。...4、除了继承,装饰模式也可以让我们扩展行为。 5、装饰模式意味着一群装饰者类, 这些类用来包装具体组件。 6、装饰者类反映出被装饰的组件类型(实际上,他们具有相同的类型,都经过接口或继承实现)。...7、装饰者可以在被装饰者的行为前面与/或后面加上自己的行为,甚至将被装饰者的行为整个取代掉,而达到特定的目的。 8、你可以有无数个装饰者包装一个组件。

36960

Java描述设计模式(09):装饰模式

."); } } 二、装饰模式 1、基础概念 装饰模式又名包装(Wrapper)模式装饰模式以对客户端透明的方式扩展对象的功能,是继承关系的一个替代方案。...4)、半透明的装饰模式是介于装饰模式和适配器模式之间的。适配器模式的用意是改变类的接口,也可以通过改写一个或几个方法,或增加新的方法来增强类的功能。...5)、大多数的装饰模式实际上是半透明的装饰模式,这样的装饰模式也称做半装饰、半适配器模式。...三、实际应用 1、JDK中IO流 1)、基本描述 装饰模式Java语言中的最经典的应用就是Java I/O类库的设计。...很少单一的创建流对象,通过创建多个叠合对象来提供所期望的IO流功能,因此装饰模式Java I/O类库的基本模式。 2)、IO流图解描述 抽象构件角色 由InputStream扮演。

37510

Java设计模式(六)装饰模式

在学装饰模式的时候,我想到了责任链模式中的级别这个概念,为什么这么说,在一个OA系统中我们会有不同级别(或者说权限范围不同)的管理员,首先我们要明确不同级别的管理员它也是管理员,我们那如何在管理员这个实体的基础上动态的去设置他们的权限范围呢...这就需要装饰模式了,而装饰模式也就是实现了这样一个功能(我的理解)。看一下概念: 装饰模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构。...这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装。 这种模式创建了一个装饰类,用来包装原有的类,并在保持类方法签名完整性的前提下,提供了额外的功能。...如上面的例子所说,我们如何使用装饰模式来实现这样的一个功能呢?...下面说一下这个模式的优缺点: 优点:装饰类和被装饰类可以独立发展,不会相互耦合,装饰模式是继承的一个替代模式装饰模式可以动态扩展一个实现类的功能。 缺点:多层装饰比较复杂。

40620

Java设计模式学习记录-装饰模式

前言 装饰模式也是一种结构型模式,主要是目的是相对于类与类之间的继承关系来说,使用装饰模式可以降低耦合度。...JDK中有不少地方都使用到了装饰模式,例如Java的各种I/O流,javax.swing包中一些图形界面构件功能的增强等地方都运用了装饰模式。 ...装饰模式 定义 装饰模式的定义是:在不改变原类文件以及不使用继承的情况下,动态的扩展一个对象的功能。装饰模式是通过创建一个包装对象来实现的,也就是用装饰来包裹真实的对象。...下面我们来分析一下装饰模式具体是由那几部分组成。 装饰模式的结构 ? 装饰模式的结构图如上所示,主要由以下几个角色组成。...想了解更多的设计模式请查看Java设计模式学习记录-GoF设计模式概述。

28710
领券