我理解的--java装饰者模式

这个模式刚开始的还是有点迷惑,要分清结构层次和实现的效果,这是学习设计模式的需要理解的。每个设计模式都有他的现实中的应用场景,这个也有,在java中就是FileInputStream、bufferedinputstream.

注意几点:

1.被装饰者。基础类,需要丰富功能,就是在原有的基础上进行修改。

2.装饰者。包装被装饰者,也可以包装修饰者。从这个层面上装饰者和被装饰者是同级的。通过装饰后,原有的类的功能更加丰富。(说明二者要实现一个超类)

我理解的--java装饰者模式_第1张图片

超类:

public interface Person {
	void getName();

	void getObj();
}
被装饰者:也就是功能需要被丰富,在原有的功能上进行修改或添加。

class MM implements Person {

	@Override
	public void getName() {
		System.out.println(" 我叫MM");

	}

	@Override
	public void getObj() {	

	}

}
装饰者:具体丰富的功能实现类可以有多个,都是不同层面上的功能。下面是两个:

public class DecoratorCar implements Person {
	Person person;

	DecoratorCar(Person person) {
		this.person = person;
	}

	@Override
	public void getName() {
		person.getName();

	}

	@Override
	public void getObj() {
		person.getObj();
		System.out.println("我有车");

	}

}
public class DecoratorHome implements Person {
	Person person;

	DecoratorHome(Person person) {
		this.person = person;
	}

	@Override
	public void getName() {
		person.getName();

	}

	@Override
	public void getObj() {
		person.getObj();
		System.out.println("我有房");

	}

}
测试类:

class Test {

	public static void main(String[] args) {
		MM mm = new MM();
		DecoratorHome decoratorHome = new DecoratorHome(new DecoratorCar(mm));
		decoratorHome.getName();
		decoratorHome.getObj();

	}

}
结果:

我叫MM
我有车
我有房

可以看出:他是在原有的类上进行了强化,如果在来一个NN,也可以进行同样的强化,拿来一百个都可以。同样的进行继承也可以完成这样的功能。装饰者与被装饰者拥有共同的超类,继承的目的是继承类型,而不是行为


你可能感兴趣的:(java设计模式,装饰者模式)