一、概念
我们在使用以前既定的类或者使用别人使用的类的时候,如果该类的方法,不满足你的需求的时候,需要你进行额外附加功能的时候,往往我们想到的方法是继承实现,
但是继承会导致类的越来越庞大,有什么好的方法呢?装饰者模式(也称静态代理)。
就是在不破坏原类的结构的基础上,对现有类附件额外功能。
条件:
1 )继承同一个类或者实现同一个接口。
2)装饰者要有被装饰者的引用。
3)需要增强的方法,对其增强,不需要增强的方法调用原先的方法。
例子:
共同继承的接口:
1 package com.jd.dec; 2 3 /** 4 * 1)接口不能实例化。 5 * 2)接口没有构造方法。 6 * 3)接口所有的方法都是抽象方法。 7 * 4)接口没有成员变量只有final和static。 8 * 5)接口的方法没有方法体。 9 * 6)接口不是被类继承而是被类实现。 10 * 7)接口可以实现多继承。 11 */ 12 public interface Car { 13 void run(); 14 void stop(); 15 }
被装饰者:
1 package com.jd.dec; 2 3 public class qq implements Car{ 4 public void run(){ 5 System.out.println("正在行驶"); 6 }; 7 public void stop(){ 8 System.out.println("停车"); 9 }; 10 11 }
装饰者:
1 package com.jd.dec; 2 3 public class binli implements Car { 4 private Car car; 5 public binli(Car car){ 6 this.car=car; 7 }//对被装饰者的引用,注意这里不写qq而是写的是Car 是指对一类的Car进行增强而不是单单qq。 8 public void run(){ 9 System.out.println("提速200");//需要增强的方法 10 }; 11 public void stop(){ 12 this.car.stop(); 13 }; 14 }
这样我可以直接调用 新类的binli对象就可以,加强原先的car类的职责。