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

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

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

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

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

我们用代码实现一下:

目的:

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

一、原始现有类

1.建一个接口

package com.xing.design.decorator;
/**
 * 画
 * @author xing
 */
public interface Shape {
void draw();
}

2.两个图形实现类

package com.xing.design.decorator;
public class Rectangle implements Shape{
@Override
public void draw() {
    System.out.println("Shape的实现类 Rectangle->矩形");
  }
}
package com.xing.design.decorator;
public class Circle implements Shape{
@Override
public void draw() {
    System.out.println("Shape的实现类Circle->圆形");
  }
}

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

二、建立装饰器

1.搞个抽象装饰类

package com.xing.design.decorator;
/**
 * 装饰类
 * @author xing
 */
public abstract class ShapeDecorator implements Shape {
// 注入原始类
protected Shape decoratedShape;
public ShapeDecorator(Shape decoratedShape){
this.decoratedShape = decoratedShape;
  }
// 增强画图形 覆盖父类
public void draw(){
    decoratedShape.draw();
  }
}

2.继承抽象类

package com.xing.design.decorator;
/**
 * 装饰类实现
 * @author xing
 */
public class RedShapeDecorator extends ShapeDecorator {
public RedShapeDecorator(Shape decoratedShape) {
super(decoratedShape);
  }
@Override
public void draw() {
// 原有的话图形方法
    decoratedShape.draw();
// 增强的方法
    setRedBorder(decoratedShape);
  }
/**
   * 画红色的
   * @param decoratedShape
   */
private void setRedBorder(Shape decoratedShape){
    System.out.println("以上图形是红色的: Red");
  }
}

3.调用测试一下

package com.xing.design.decorator;
public class DecoratorPattern {
public static void main(String[] args) {
// 画个图形
    Shape circle = new Circle();
    System.out.println("原始类画图:");
    circle.draw();
    Rectangle rectangle = new Rectangle();
    System.out.println("原始类画图:");
    rectangle.draw();
// 装饰类1
    ShapeDecorator redCircle = new RedShapeDecorator(new Circle());
// 装饰类2
    ShapeDecorator redRectangle = new RedShapeDecorator(new Rectangle());
    System.out.println("\n装饰类1的画图:");
    redCircle.draw();
    System.out.println("\n装饰类2的画图:");
    redRectangle.draw();
  }
}


装饰器模式的实现原理:

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


总结:

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


END

目录
相关文章
|
5天前
|
设计模式
设计模式~~~装饰者模式
设计模式~~~装饰者模式
10 0
|
2月前
|
设计模式
设计模式之装饰器模式
设计模式之装饰器模式
15 0
|
4月前
|
设计模式 uml
【设计模式】之装饰器模式
【设计模式】之装饰器模式
29 0
|
5月前
|
设计模式 消息中间件 存储
一起来学设计模式之装饰器模式
前言 目前正在出一个设计模式专题系列教程, 篇幅会较多, 喜欢的话,给个关注❤️ ~ 本节给大家讲一下设计模式中的装饰器模式,并结合实际业务场景给大家讲解如何使用~ 本专题的所有案例代码主要以Java语言为主, 好了, 废话不多说直接开整吧~ 装饰器模式 装饰器模式(Decorator Pattern)是一种结构型设计模式,它允许在运行时动态地给一个对象添加额外的职责,而不需要修改原始类的代码。这种模式是作为替代继承方式的一种实现。
|
5月前
|
设计模式 Java 测试技术
浅谈设计模式 - 装饰器模式(五)
​ 装饰器模式是是对类进行增强的一种典型设计模式,它允许对于一个现有类进行增强的操作,对于喜欢使用继承的伙伴,这个模式非常贴切的展示的了对于继承的灵活用法。但是装饰器模式同样不是一个推崇使用的模式,因为他对于继承存在依赖性,从本文后续就可以了解到装饰类膨胀的问题,所以在设计代码结构的时候,装饰器模式并不是第一考虑。
31 0
|
8月前
|
设计模式 Java uml
《设计模式》装饰者模式
《设计模式》装饰者模式
《设计模式》装饰者模式
|
10月前
|
设计模式 Java
23种设计模式——装饰者模式
这种模式创建了一个装饰类,用来包装原有的类,并在保持类方法签名完整性的前提下,提供了额外的功能。
40 0
|
11月前
|
设计模式 缓存 Java
浅析设计模式3 —— 装饰者模式
推荐语:本文从装饰者模式的核心思想到与其他设计模式的横向对比,从代码示例到业务实战,向读者娓娓呈现装饰者模式的真貌。深入浅出的JDK源码透析,使用场景的利弊权衡,真的值得一阅! ——大淘宝技术开发工程师 玄苏
浅析设计模式3 —— 装饰者模式
|
12月前
|
设计模式 SQL 缓存
设计模式之装饰器模式
装饰器在java中最典型的应用就是IO,我们知道在IO家族中有各种各样的流,而流往往都是作用在子类之上,然后增加其附加功能,我们以InputStream 举例。
设计模式之装饰器模式
|
设计模式
【设计模式系列7】装饰器模式
突然想写这个设计模式,是因为刚看了FactoryBean,因为它通过装饰模式,来进一步修饰Bean对象,所以想看看这个模式是怎么使用的。我理解这个设计模式,就是基于原来的对象进行装饰。
86 0
【设计模式系列7】装饰器模式
相关产品
云迁移中心
推荐文章
更多