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

简介

在实现一个类的方法时,额外的增加一些功能
这类看似和代理模式的工程相同,在最后会讲解两者的差异
主要模块

  • 抽象构件
  • 具体构件
  • 抽象装饰
  • 具体装饰

例子

抽象构件

//吃饭
public interface EatAble {
    //吃这个方法
    void eat();
}

具体构件

//家里吃饭
public class House implements EatAble {
    @Override
    public void eat() {
        System.out.println("吃饭。。。。");
    }
}

抽象装饰

//抽象装饰角色
public class Decorator implements EatAble {

    private EatAble eatAble;

    public Decorator(EatAble eatAble) {
        this.eatAble = eatAble;
    }

    @Override
    public void eat() {
        eatAble.eat();
    }
}

具体装饰

//具体装饰角色
public class Outer extends Decorator {

    public Outer(EatAble eatAble) {
        super(eatAble);
    }

    @Override
    public void eat() {
        super.eat();
        pay();
    }
    
    //吃晚饭需要付钱
    private void pay() {
        System.out.println("付钱。。。。。");
    }
    
}

测试

public class Main {
    public static void main(String[] args) {
        EatAble house = new House();
        house.eat();
        System.out.println("===========================");
        EatAble outer = new Outer(new House());
        outer.eat();
//        吃饭。。。。
//===========================
//        吃饭。。。。
//        付钱。。。。。
    }
}

与代理模式的差异

①关注点不一样,代理模式关注的是访问权限,装饰模式关注的增加功能
②调用者能感知到实现装饰模式的类,代理模式感知不到,换言之代理模式不知道 究竟是哪个类完成的代理,而装饰模式需要把这个类传进去
③执行时,代理模式使用的是组合(将原对象作为属性保存起来,执行原对象方法,再执行代理对象额外的方法),装饰模式使用的是集成(首先调用super的原对象方法,在调用装饰对象的额外方法)
④装饰模式层次更加分明,可以为不能进行集成的类形成一条集成链,使用多态

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值