Java--设计模式-2-装饰器模式

简介: 装饰器模式(Decorator Pattern)就是在不改变原始对象本质的前提下,对现有类进行包装,从而提供出额外的功能。

装饰器模式(Decorator Pattern)就是在不改变原始对象本质的前提下,对现有类进行包装,从而提供出额外的功能。

       不改变现有类而提供额外的功能,听起来好像是说类继承,没错,装饰器模式就是继承的另一种代替方案,使用继承方式为类引入静态特征,并且随着扩展功能的增多,子类会很膨胀,所以装饰器模式比起类继承实现更加的灵活。

       装饰器模式的核心就是功能扩展。设计模式类型属于结构型模式。就是是作为现有的类的一个包装。

我们用代码实现一下:

目的:

       给一个图形附上一些色彩,图形依旧是图形(原始类不变),但是通过装饰类,我们给各个图形附上色彩。

一、原始现有类

1.建一个接口

packagecom.xing.design.decorator;
/*** 画* @author xing*/publicinterfaceShape {
voiddraw();
}

2.两个图形实现类

packagecom.xing.design.decorator;
publicclassRectangleimplementsShape{
@Overridepublicvoiddraw() {
System.out.println("Shape的实现类 Rectangle->矩形");
  }
}
packagecom.xing.design.decorator;
publicclassCircleimplementsShape{
@Overridepublicvoiddraw() {
System.out.println("Shape的实现类Circle->圆形");
  }
}

3.现在就是现有类,画出两个图形:

image.png

二、建立装饰器

1.搞个抽象装饰类

packagecom.xing.design.decorator;
/*** 装饰类* @author xing*/publicabstractclassShapeDecoratorimplementsShape {
// 注入原始类protectedShapedecoratedShape;
publicShapeDecorator(ShapedecoratedShape){
this.decoratedShape=decoratedShape;
  }
// 增强画图形 覆盖父类publicvoiddraw(){
decoratedShape.draw();
  }
}


2.继承抽象类

packagecom.xing.design.decorator;
/*** 装饰类实现* @author xing*/publicclassRedShapeDecoratorextendsShapeDecorator {
publicRedShapeDecorator(ShapedecoratedShape) {
super(decoratedShape);
  }
@Overridepublicvoiddraw() {
// 原有的话图形方法decoratedShape.draw();
// 增强的方法setRedBorder(decoratedShape);
  }
/*** 画红色的* @param decoratedShape*/privatevoidsetRedBorder(ShapedecoratedShape){
System.out.println("以上图形是红色的: Red");
  }
}

3.调用测试一下

packagecom.xing.design.decorator;
publicclassDecoratorPattern {
publicstaticvoidmain(String[] args) {
// 画个图形Shapecircle=newCircle();
System.out.println("原始类画图:");
circle.draw();
Rectanglerectangle=newRectangle();
System.out.println("原始类画图:");
rectangle.draw();
// 装饰类1ShapeDecoratorredCircle=newRedShapeDecorator(newCircle());
// 装饰类2ShapeDecoratorredRectangle=newRedShapeDecorator(newRectangle());
System.out.println("\n装饰类1的画图:");
redCircle.draw();
System.out.println("\n装饰类2的画图:");
redRectangle.draw();
  }
}


结果:

image.png


装饰器模式的实现原理:

       让装饰器实现与被装饰类相同的接口,使得装饰器与被扩展类类型一致,并在构造函数中传入该接口对象,然后在实现这个接口的被包装类对象的现有功能上添加新功能。由于装饰器与被包装类属于同一类型(实现自同一接口),且构造函数的参数为其实现接口类,因此装饰器模式具备嵌套扩展功能,这样就能使用装饰器模式一层一层地对底层被包装类进行功能扩展了。


总结:

       我们在没有改变图形类的前提下,添加了图形是红色的说明。用装饰类来包装原有的图形类,并在保持类方法签名完整性的前提下,提供了额外的功能。


END

目录
相关文章
|
1月前
|
设计模式 Java Spring
Java 设计模式之责任链模式:优雅处理请求的艺术
责任链模式通过构建处理者链,使请求沿链传递直至被处理,实现发送者与接收者的解耦。适用于审批流程、日志处理等多级处理场景,提升系统灵活性与可扩展性。
213 2
|
1月前
|
设计模式 网络协议 数据可视化
Java 设计模式之状态模式:让对象的行为随状态优雅变化
状态模式通过封装对象的状态,使行为随状态变化而改变。以订单为例,将待支付、已支付等状态独立成类,消除冗长条件判断,提升代码可维护性与扩展性,适用于状态多、转换复杂的场景。
261 0
|
3月前
|
设计模式 缓存 Java
Java设计模式(二):观察者模式与装饰器模式
本文深入讲解观察者模式与装饰器模式的核心概念及实现方式,涵盖从基础理论到实战应用的全面内容。观察者模式实现对象间松耦合通信,适用于事件通知机制;装饰器模式通过组合方式动态扩展对象功能,避免子类爆炸。文章通过Java示例展示两者在GUI、IO流、Web中间件等场景的应用,并提供常见陷阱与面试高频问题解析,助你写出灵活、可维护的代码。
|
1月前
|
设计模式 算法 搜索推荐
Java 设计模式之策略模式:灵活切换算法的艺术
策略模式通过封装不同算法并实现灵活切换,将算法与使用解耦。以支付为例,微信、支付宝等支付方式作为独立策略,购物车根据选择调用对应支付逻辑,提升代码可维护性与扩展性,避免冗长条件判断,符合开闭原则。
260 35
|
1月前
|
设计模式 消息中间件 传感器
Java 设计模式之观察者模式:构建松耦合的事件响应系统
观察者模式是Java中常用的行为型设计模式,用于构建松耦合的事件响应系统。当一个对象状态改变时,所有依赖它的观察者将自动收到通知并更新。该模式通过抽象耦合实现发布-订阅机制,广泛应用于GUI事件处理、消息通知、数据监控等场景,具有良好的可扩展性和维护性。
220 8
|
6月前
|
设计模式 缓存 安全
【高薪程序员必看】万字长文拆解Java并发编程!(8):设计模式-享元模式设计指南
🌟 ​大家好,我是摘星!​ 🌟今天为大家带来的是并发编程中的经典对象复用设计模式-享元模式,废话不多说让我们直接开始。
163 0
|
3月前
|
设计模式 安全 Java
Java设计模式(一):单例模式与工厂模式
本文详解单例模式与工厂模式的核心实现及应用,涵盖饿汉式、懒汉式、双重检查锁、工厂方法、抽象工厂等设计模式,并结合数据库连接池与支付系统实战案例,助你掌握设计模式精髓,提升代码专业性与可维护性。
|
3月前
|
设计模式 XML 安全
Java枚举(Enum)与设计模式应用
Java枚举不仅是类型安全的常量,还具备面向对象能力,可添加属性与方法,实现接口。通过枚举能优雅实现单例、策略、状态等设计模式,具备线程安全、序列化安全等特性,是编写高效、安全代码的利器。
|
设计模式 XML Java
【设计模式】装饰器模式(定义 | 特点 | Demo入门讲解)
【设计模式】装饰器模式(定义 | 特点 | Demo入门讲解)
130 0
|
8月前
|
设计模式 Java 数据安全/隐私保护
Java 设计模式:装饰者模式(Decorator Pattern)
装饰者模式属于结构型设计模式,允许通过动态包装对象的方式为对象添加新功能,提供比继承更灵活的扩展方式。该模式通过组合替代继承,遵循开闭原则(对扩展开放,对修改关闭)。

热门文章

最新文章

下一篇
oss云网关配置