装饰器设计模式

来源:互联网 发布:非典真实死亡人数知乎 编辑:程序博客网 时间:2024/05/22 15:35

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

参考资料: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。

0 0
原创粉丝点击