装饰者设计模式

装饰者设计模式

装饰者设计模式:如果想对已经存在的对象进行装饰,那么就定义一个类,在类中对已经有的对象进行功能的增强或添加另外的行为,这个类就叫装饰者类。被修饰的类叫被装饰者类,是已经存在有的功能。在装饰者类之间又可以互相装饰

特点:
          1.装饰类通过构造方法来接收被装饰者的对象,调用它里面的功能或行为
          2. 基于对被装饰对象的功能进行扩展,提供更强大的功能

举例:

假设有一个接口IWaiter(或者父类):

1 public interface IWaiter {
2     void service();
3 }

具体实现类(或者子类)为Waitress类:

1 public class Waitress implements IWaiter{
2 
3     @Override
4     public void service() {
5         // TODO Auto-generated method stub
6         System.out.println("在服务。。。。");
7     }
8     
9 }

现在想对Waitress的service方法进行扩展。

定义一个WaitressWrap类(包装类),实现接口(或者继承父类)IWaiter:

 1 public class WaitressWrap implements IWaiter{
 2     IWaiter waiter=null;
 3     //定义构造方法来接收被装饰者的对象
 4     public WaitressWrap(IWaiter waiter) {
 5         this.waiter=waiter;
 6     }
 7     //重写service方法
 8     @Override
 9     public void service() {
10         // TODO Auto-generated method stub
11         System.out.println("微笑");
12         waiter.service();
13         
14     }
15 }

 

 装饰者设计模式减少了继承体系的臃肿(如果用继承重写的方式,会派生出很多子类),增加了功能,比继承更灵活。装饰类和被装饰类必须所属于同一个体系,通常装饰类都会提供构造函数接收被装饰类对象。

 

原文地址:https://www.cnblogs.com/hopeyes/p/9685734.html