设计模式-装饰者模式
基本介绍
动态的将新功能附加到对象上。
装饰模式是一种用于代替继承的技术 ,无须通过继承增加子类就能扩展对象的新功能。使用对象的 关联关系代替继承关系,更加灵活,同时避免类型体系的快速膨胀。
角色
- 1.
抽象组件角色 - 2.
具体组件角色(真实角色) - 3.
抽象装饰者角色 - 4.
具体装饰者角色
概念理解
这里以钢铁侠举例:
众所周知,在漫威中“富人靠科技,穷人靠变异",其中托尼▪斯塔克本身是个人类也就是抽象的组件角色;托尼▪斯塔克是具体的组件角色;我们都知道在漫威中这类人被称为超级英雄,那么这里超级英雄可以说是抽象的装饰者;而托尼又被称为“钢铁侠”,那么这里的钢铁侠就是具体的装饰者角色。
实现
Human
/**
* 抽象组件类
*/
public abstract class Human {
//行为
public abstract void behavior();
}
TonyStark
/** 具体组件类
* date: 2023/8/3 21:30
* author: MR.孙
*/
public class TonyStark extends Human{
@Override
public void behavior() {
System.out.println("运用科技和财富拯救世界");
}
}
Superhero
/** 抽象装饰着类
* date: 2023/8/4 20:43
* author: MR.孙
*/
public abstract class Superhero extends Human{
private Human human;
//获取被装饰对象
public Superhero(Human human) {
this.human = human;
}
@Override
public void behavior() {
//执行目标对象原本的行为
human.behavior();
}
}
IronMan
/** 具体装饰者类
* 钢铁侠类
* date: 2023/8/4 20:48
* author: MR.孙
*/
public class IronMan extends Superhero{
public IronMan(Human human) {
super(human);
}
@Override
public void behavior() {
super.behavior();
//增强目标对象的行为
System.out.println("穿戴钢铁战衣拯救世界");
}
}
测试
Test
public class Test {
//最后我们通过装饰者模式,来模拟没有钢铁战衣的托尼斯塔克和有钢铁战衣的区别。
public static void main(String[] args) {
//创建托尼斯塔克对象
TonyStark tonyStark = new TonyStark();
//执行结果:
//运用科技和财富拯救世界
tonyStark.behavior();
//通过装饰者模式使托尼斯塔克对象装饰成钢铁侠对象
IronMan ironMan = new IronMan(tonyStark);
//执行结果:
//运用科技和财富拯救世界
//穿戴钢铁战衣拯救世界
ironMan.behavior();
}
~~~

浙公网安备 33010602011771号