装饰器模式一般使用场景是: 对已有功能代码想做增强,而不是修改原有功能或者代码;
1 完美符合开闭原则,对于原代码无任何改动,入侵,增强其功能
例如现在有一条普通的中华田园犬,它能吃,能跑,这就是它原本的样子,有一天,他碰到了一个老神仙,让他有了会飞的本领~~,但是它原本的样子是不需要被改动的,只需要给它一双隐形的翅膀即可!
一个动物的抽象类
public interface Animal extends Shen{void eat();void run();}
中华田园犬本尊
@Service
public class Dog implements Animal{@Overridepublic void eat() {System.out.println("狗能吃东西");}@Overridepublic void run() {System.out.println("狗能奔跑");}
}
一个老神仙,有能让动物会飞的本领
public interface Shen {default void fly() {System.out.println("还能飞");}
}
注意,老神仙可以让中华田园犬飞起来,所以 Animal接口还继承了 Shen,就是为了让中华田园犬飞起来
搞一个测试类
@SpringBootTest
class AnimalTest {@AutowiredAnimal animal;@Testvoid ss() {animal.eat();animal.run();animal.fly();}
}
1 当Animal接口不继承Shen的时候,那么中华田园犬就只能 吃 和 跑
2 Animal接口继承了 Shen之后,中华田园犬还有了飞的技能;所有的动物都有了飞的技能~ 一劳永逸
装饰器模式,就像一个简陋的aop一样,它完成了对于某个对象,或者方法的增强,与aop原理截然不同,做的事情是相同的;
装饰器模式,对于加强原有功能,是一个非常不错的选择;
上一篇:RFID节点的编写