现在的位置: 首页 > 面试题 > 设计模式面试题 > 正文

6.什么是装饰器模式?

2022年01月03日 设计模式面试题 ⁄ 共 982字 ⁄ 字号 暂无评论
博客主机

答:装饰器模式是指动态地给一个对象增加一些额外的功能,同时又不改变其结构。

 

优点:装饰类和被装饰类可以独立发展,不会相互耦合,装饰模式是继承的一个替代模式,装饰模式可以动态扩展一个实现类的功能。

 

装饰器模式的关键:装饰器中使用了被装饰的对象。

 

比如,创建一个对象“laowang”,给对象添加不同的装饰,穿上夹克、戴上帽子......,这个执行过程就是装饰者模式,实现代码如下。

 

1)定义顶层对象,定义行为

interface IPerson {

void show();

}

 

2)定义装饰器超类

class DecoratorBase implements IPerson{

IPerson iPerson;

public DecoratorBase(IPerson iPerson){

this.iPerson = iPerson;

}

@Override

public void show() {

iPerson.show();

}

}

 

3)定义具体装饰器

class Jacket extends DecoratorBase {

public Jacket(IPerson iPerson) {

super(iPerson);

}

@Override

public void show() {

// 执行已有功能

iPerson.show();

// 定义新行为

System.out.println("穿上夹克");

}

}

class Hat extends DecoratorBase {

public Hat(IPerson iPerson) {

super(iPerson);

}

@Override

public void show() {

// 执行已有功能

iPerson.show();

// 定义新行为

System.out.println("戴上帽子");

}

}

 

4)定义具体对象

class LaoWang implements IPerson{

@Override

public void show() {

System.out.println("什么都没穿");

}

}

 

5)装饰器模式调用

public class DecoratorTest {

public static void main(String[] args) {

LaoWang laoWang = new LaoWang();

Jacket jacket = new Jacket(laoWang);

Hat hat = new Hat(jacket);

hat.show();

}

}

Wopus问答

Wopus问答

给我留言

留言无头像?


×