来自于:http://www.cnblogs.com/lwbqqyumidi/p/3750634.html
在面向对象设计过程中,经常会遇到需要对现有的类的功能进行扩展,通常我们可以采用继承的方式。例如最近在做手机,一开始需要定义手机所应具有的功能:
interface Phone{ public void tel(); public void sms(); }
在此,为简单起见,只是定义了接打电话和收发短信功能。第一代手机T1终于面世了
class T1 implements Phone{ @Override public void tel() { System.out.println("可以实现基本的接打电话"); } @Override public void sms() { System.out.println("可以实现基本的收发短信功能"); } }
但是,在手机的每次版本上面都有新的功能增加,简单的做法就是每次有新的功能都会去继承T1;但是这样迭代下去;无限多的功能,依次这样去继承下去;到后面需要进行优化的时候;就会关联影响;使用装饰设计模式就可以解决类型的问题
class T2 implements Phone { private Phone phone; public T2(Phone phone) { this.phone = phone; } // 增加的新的功能 public void installApk() { System.out.println("可以安装Android软件了"); } @Override public void tel() { phone.tel(); } @Override public void sms() { phone.tel(); } }
测试使用
public class DecoratorTest { public static void main(String[] args) { //利用多态将原来的实现类和装饰类联系起来 Phone t1 = new T1(); Phone t2 = new T2(t1); t2.tel(); t2.sms(); } }