Java设计模式概述之结构型模式(装饰器模式)

三、装饰器模式

在Java中,装饰器模式使用场景非常普遍,例如BufferedInputStream就利用了装饰器模式。

装饰器模式与代理模式非常相似,相似点可总结如下:

1、都是对原始类功能、特性的增强。
2、都是通过注入原始类来实现类的增强。
3、其增强原始类的方式都是非侵入的,可插拔的。
4、被扩展后的代码具有良好的扩展性。

当然,不同点如下:

1、注入方式不同。装饰器模式是通过其构造方法接受原始类的实例的引用注入;代理模式是通过内部自动创建原始类的实例。
2、扩展性不同。装饰器模式可以利用多态性来实现增强指定类的功能;代理模式只能针对固定类。装饰器模式的扩展性更强。

装饰设计模式示意图:

这里写图片描述

代码:

/**
 * @author Hanlin Wang
 */

public class DecoratorMode {
    public static void main(String[] args) {
        A a = new A();
        Decorator decorator = new Decorator(a);
        decorator.run();
    }
}

//定义装饰类
class Decorator implements C1{
    private C1 c;
    public Decorator(C1 c){
        this.c = c;
    }
    public void run(){
        System.out.println("before");
        c.run();
        System.out.println("after");
    }
}

//定义被装饰类装饰的类
class A implements C1{
    public void run(){
        System.out.println("A's running");
    }
}

//定义A类实现的接口
interface C1{
    void run();
}

Decorator为装饰器类,A为原始类,C1为公共接口,接口中有一个run方法。Decorator、A都实现C1接口的run方法。Decorator类中定义了私有的A类的成员变量a,并自定义了构造函数public Decorator(A a)用于注入a成员变量引用的实例对象。

转载于:https://www.cnblogs.com/wanxi/p/6476240.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值