java设计模式之——装饰(Decorator)模式

设计模式之——装饰(Decorator)模式

装饰模式定义

指的是在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。

装饰模式的优点

  1. Decorator模式与继承关系的目的都是要扩展对象的功能,但是Decorator可以提供比继承更多的灵活性。
  2. 通过使用不同的具体装饰类以及这些装饰类的排列组合,设计师可以创造出很多不同行为的组合。

装饰模式的缺点

  1. 增加了系统的复杂度。

装饰模式的实现

定义一个抽象角色

/**
 * @ClassName AbstractRole
 * @Description TODO
 * @Author mamingcong
 * @Date 2020/6/11 18:06
 * @Version 1.0
 */
public interface AbstractRole {

    public void getName();
}

定义一个具体角色

/**
 * @ClassName RealRole
 * @Description TODO
 * @Author mamingcong
 * @Date 2020/6/11 18:08
 * @Version 1.0
 */
public class RealRole implements AbstractRole{
    @Override
    public void getName() {
        System.out.println("我的名字是RealRole");
    }
}

定义一个抽象装饰角色

/**
 * @ClassName AbstractDecorator
 * @Description TODO
 * @Author mamingcong
 * @Date 2020/6/11 18:10
 * @Version 1.0
 */
public class AbstractDecorator implements AbstractRole {
    private AbstractRole abstractRole;

    public AbstractDecorator(AbstractRole abstractRole) {
        this.abstractRole = abstractRole;
    }

    @Override
    public void getName() {
        abstractRole.getName();
    }
}

定义一个具体装饰角色

/**
 * @ClassName RealDecorator
 * @Description TODO
 * @Author mamingcong
 * @Date 2020/6/11 18:11
 * @Version 1.0
 */
public class RealDecorator extends AbstractDecorator {

    public RealDecorator(AbstractRole abstractRole) {
        super(abstractRole);
    }

    public void setName() {
        System.out.println("装饰着增加的名字");
    }
    
    public void getName() {
        super.getName();
    }
}

测试

/**
 * @ClassName Test
 * @Description TODO
 * @Author mamingcong
 * @Date 2020/6/11 18:14
 * @Version 1.0
 */
public class Test {
    public static void main(String[] args) {
        AbstractRole abstractRole = new RealRole();
        AbstractDecorator abstractDecorator = new RealDecorator(abstractRole);
        abstractDecorator.getName();
    }
}

运行结果

装饰着增加的名字
我的名字是RealRole

装饰模式的使用场景

  1. 当需要给一个现有类添加附加职责,但是不能采用继承的方法进行扩充时。
  2. 当对象的功能要求可以动态地添加,也可以再动态地撤销时。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值