码迷,mamicode.com
首页 > 其他好文 > 详细

设计模式之装饰模式

时间:2017-10-02 11:49:46      阅读:205      评论:0      收藏:0      [点我收藏+]

标签:style   icp   打电话   void   xtend   call   int   rgs   main   

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

 

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();
    }
}

 

设计模式之装饰模式

标签:style   icp   打电话   void   xtend   call   int   rgs   main   

原文地址:http://www.cnblogs.com/emoji1213/p/7619837.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!