装饰模式笔记(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)))

//重写

}

发光并非太阳的专利,我也可以发光 。

装饰模式笔记(Java)

相关文章:

你感兴趣的文章:

标签云: