装饰器设计模式

装饰模式可以组合在一起使用。

参考资料:http://blog.csdn.net/janice0529/article/details/44160091
说明:作者还写了很多设计模式的文章。

《设计模式 Java 版》GitHub 书籍。
https://www.gitbook.com/book/quanke/design-pattern-java/details

手机类,是一个接口,它是抽象的。

public interface Phone {

    public abstract void call();

}

手机类的基本实现类(没有额外功能)

苹果手机(基础手机类,没有添加任何的额外功能)

public class IPhone implements Phone{
    @Override
    public void call() {
        System.out.println("苹果手机可以打电话。");
    }
}

下面给手机设置额外的功能(重点,抽象,这是核心)

装饰器抽象类(这个类非常重要)

public abstract class PhoneDecorate implements Phone {

    private Phone phone;

    public PhoneDecorate(Phone phone){
        this.phone = phone;
    }

    @Override
    public void call() {
        this.phone.call();
    }
}

装饰器具体的类(通过构造器注入,然后重写父类的方法,在父类方法的前后增加逻辑)

super 这个关键字很重要,决定了是由父类对象实现。自己添加的逻辑,在这个方法的前后,而没有全部覆盖了父类方法。
super 这个关键字很重要,决定了是由父类对象实现。自己添加的逻辑,在这个方法的前后,而没有全部覆盖了父类方法。
super 这个关键字很重要,决定了是由父类对象实现。自己添加的逻辑,在这个方法的前后,而没有全部覆盖了父类方法。

1、可以听音乐的装饰器

public class MusicDecorate extends PhoneDecorate{
    public MusicDecorate(Phone phone) {
        super(phone);
    }

    @Override
    public void call(){
        System.out.println("装饰器:手机可以听音乐");
        super.call();
    }
}

2、可以看书的装饰器

public class BookDecorate extends PhoneDecorate {
    public BookDecorate(Phone phone) {
        super(phone);
    }

    @Override
    public void call(){
        super.call();
        System.out.println("装饰器:手机可以看电子书");
    }
}

测试类:

public class Test {

    public static void main(String[] args) {
        Phone myPhone = new BookDecorate(new MusicDecorate(new IPhone()));
        myPhone.call();
    }
}

JDK 中的实现类: IO。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值