java 装饰者模式

时间:2022-08-08 05:01:06

一、概念

我们在使用以前既定的类或者使用别人使用的类的时候,如果该类的方法,不满足你的需求的时候,需要你进行额外附加功能的时候,往往我们想到的方法是继承实现,

但是继承会导致类的越来越庞大,有什么好的方法呢?装饰者模式(也称静态代理)。

就是在不破坏原类的结构的基础上,对现有类附件额外功能。

条件:

1 )继承同一个类或者实现同一个接口。

2)装饰者要有被装饰者的引用。

3)需要增强的方法,对其增强,不需要增强的方法调用原先的方法。

例子:

共同继承的接口:

 package com.jd.dec;

 /**
* 1)接口不能实例化。
* 2)接口没有构造方法。
* 3)接口所有的方法都是抽象方法。
* 4)接口没有成员变量只有final和static。
* 5)接口的方法没有方法体。
* 6)接口不是被类继承而是被类实现。
* 7)接口可以实现多继承。
*/
public interface Car {
void run();
void stop();
}

被装饰者:

 package com.jd.dec;

 public class qq  implements  Car{
public void run(){
System.out.println("正在行驶");
};
public void stop(){
System.out.println("停车");
}; }

装饰者:

 package com.jd.dec;

 public class binli implements  Car {
private Car car;
public binli(Car car){
this.car=car;
}//对被装饰者的引用,注意这里不写qq而是写的是Car 是指对一类的Car进行增强而不是单单qq。
public void run(){
System.out.println("提速200");//需要增强的方法
};
public void stop(){
this.car.stop();
};
}

这样我可以直接调用 新类的binli对象就可以,加强原先的car类的职责。