装饰模式笔记(Java)

装饰模式:动态的给一个对象添加一些额外的功能,就增加功能来说,装饰模式比生成子类更为灵活。装饰模式是一种结构型模式。是一种对象结构型模式。

使用继承机制是添加功能的一种有效途径。

 

装饰模式的参与者:抽象构件类(Component),具体构件类(ConcreteComponent),装饰抽象类(Decorator),具体装饰类(ConcreteDecorator)。

抽象构件类(Component):定义一个对象接口,可以给这个接口动态的添加职责。

具体构件类(ConcreteComponent):定义一个对象,可以给这个对象添加一些职责。

装饰抽象类(Decorator):持有一个指向Component对象的指针,并定义了一个与Component接口一致的接口。

具体装饰类(ConcreteDecorator):负责给Component添加职能。

 

Component类:

public interface Component{

       void sampelOperation();

}

 

ConcreteComponent类:

public class ConcreteComponent implements Component{

       public ConcreteComponent (){

               //构造函数

       }

       public void sampelOperation(){

}

 

Decorator类

public abstract class Decorator implements Component{

         private Component component;

         public Decorator (Component component){

                    this.component=component;

         }

         public abstract void Decorator();

         public void sampelOperation(){

              //重写

         }

}

 

ConcreteDecorator类

 

使用装饰模式应该注意:

(1)接口的一致性。装饰对象的接口必须与它所装饰的对象的接口是一致的。因此所有的ConcreteDecorator必须有一个公共的父类。

(2)当只需增加一项功能时,没必要定义抽象的Decorator类,可以省略它。

(3)保持Component的简单性,为了保证接口的一致性,装饰的类和被装饰的类必须有一个公共的Component类。它应集中定义接口而不是存储数据。对数据表示的定义应该延迟到子类去实现。否则Component会过于庞大和复杂,而难以大量使用。

(4)Decorator模式只是改变对象的外壳,并不改变内核。改变内核一般使用策略模式。

 

在以下情况下使用装饰模式:

(1)需要扩展一个类的功能,或给一个类添加附加责任。

(2)需要动态给一个对象的添加附加功能,这些功能可以撤销。

(3)需要增加由一些基本功能排列组合产生非常强大的功能,而使用继承关系不能实现。

public class ConcreteDecorator extends Decorator{

         private Component component;

         public ConcreteDecorator (Component component){

                   super(component);

         }

         public void Decorator(){

               //添加的功能写在这里

         }

         public void sampelOperation(){

              //重写,在这里也可以添加功能

         }

}

装饰模式呈链状。如:假设有具体的三个装饰类:Decorator1,Decorator2,Decorator3.

则可写成:new Decorator1(

                       new Decorator2(

                              new Decorator3(

                                      new ConcreteComponent)))

 

              //重写

        }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值