0%

设计模式-装饰模式

装饰模式(Decorator pattern),属于结构型模式,在不改变原有类的同时,向其添加新的行为。

结构


涉及到了四个角色,Component(组件)、ConcreteComponent **(具体组件)、Decorator(装饰)、ConcreteDecorator**(具体装饰)

组件

Component,具体组件和装饰的公共接口,示例如下

1
2
3
public interface Weapon {
String fire();
}

具体组件

ConcreteComponent,定义了基本行为的类,可以被具体装饰修改。示例如下

1
2
3
4
5
6
public class M4 implements Weapon{
@Override
public String fire() {
return "fire";
}
}

装饰

Decorator,包含组件接口字段,委托所有对象操作。示例如下

1
2
3
4
5
6
7
8
9
10
public abstract class Accessory implements Weapon {
private Weapon weapon;
public Accessory(Weapon weapon){
this.weapon = weapon;
}
@Override
public String fire() {
return weapon.fire();
}
}

具体装饰

ConcreteDecorator,定义了可以动态插入组件的行为。示例如下(可以创建多个)

1
2
3
4
5
6
7
8
public class Muffler extends Accessory{
public Muffler(Weapon weapon){
super(weapon);
}
public String fire(){
return super.fire() + " with silently";
}
}

客户端

对如上代码测试,示例如下

1
2
3
4
5
6
public class Client {
public static void main(String[] args) {
Weapon weapon = new Muffler(new M4());
System.out.println(weapon.fire());
}
}

output:

1
fire with silently

完整代码

完整代码已上传,项目地址https://github.com/yuan0824/DesignPattern

参考资料