设计模式之装饰模式

装饰模式:动态地给一个对象添加一些额外的职责。如果是增加功能,装饰模式比生成子类更灵活。

 

1.普通的手机

public interface Phone {
    public void call();
}


public class MyPhone implements Phone{
    @Override
    public void call() {
        System.out.println("打电话!");
    }
}

2.装饰者

public abstract class PhoneDecorator implements Phone {
    private Phone phone;

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

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

3.具体想装饰的功能

public class MessagePhoneDecorator extends PhoneDecorator{
    public MessagePhoneDecorator(Phone phone) {
        super(phone);
    }

    @Override
    public void call() {
        super.call();
        System.out.println("可以发短信了。");
    }
}

 

public class MusicPhoneDecorator extends PhoneDecorator {

    public MusicPhoneDecorator(Phone phone) {
        super(phone);
    }

    @Override
    public void call() {
        super.call();
        System.out.println("可以听音乐了。");
    }
}

 

测试:

public class DecoratorDemo {
    public static void main(String[] args) {
        Phone phone=new MyPhone();
        PhoneDecorator messagePhoneDecorator=new MessagePhoneDecorator(phone);
        messagePhoneDecorator.call();

        PhoneDecorator musicPhoneDecorator=new MusicPhoneDecorator(phone);
        musicPhoneDecorator.call();
    }
}

 

posted @ 2017-10-02 11:17  emoji的博客  阅读(101)  评论(0编辑  收藏  举报