介绍装饰者模式
装饰者模式是,在不改动类的前提更新类的方法,通过的装饰者类来进行解决,这里需要和之前介绍的依赖进行区分一下
A:相似点:装饰者类和依赖一样,都需要有另一个类的对象传进来
B:不同点:依赖是增加方法,装饰者模式是进项更新装饰方法,并没有增加方法
由于学术短浅,目前只能装饰从接口实现来的方法,不能装饰新增的方法,日后了解一定更新
代码介绍
来一个接口,用于实现两个类的方法是一样的
public interface Person {
public void run();
public void read();
public void eat();
}
被装饰的类
public class A implements Person {
@Override
public void run() {
// TODO Auto-generated method stub
System.out.println("跑啊跑");
}
@Override
public void read() {
// TODO Auto-generated method stub
System.out.println("嘟嘟嘟");
}
@Override
public void eat() {
// TODO Auto-generated method stub
System.out.println("吃吃吃");
}
}
装饰类
import java.util.Date;
/**
*B为A的装饰类, 1:B想要知道A的类里的方法,需要去实现A实现的接口,
* 2:构造方法,需要传递进来被装饰者的对象
* 3:在装饰者类里,对方法进行"装饰",若不许要更新,则直接用被装饰者对象调用方法
*
* @author lenovo
*
*/
public class B implements Person {
/**
* 假如装饰run和read方法,多打印当前日期
*/
A a;
//有参构造,传一个被装饰者对象进来
@Override
public void run() {
// TODO Auto-generated method stub
//对a的方法进行装饰
System.out.println(new Date());
a.run();
}
public B(A a) {
super();
this.a = a;
}
@Override
public void read() {
// TODO Auto-generated method stub
System.out.println(new Date());
a.read();
}
@Override
public void eat() {
// TODO Auto-generated method stub
a.eat();
}
}
测试类
public class Test {
public static void main(String[] args) {
A a=new A();
B bm=new B(a);
bm.run();
bm.eat();
bm.read();
}
}