设计模式之装饰模式

来源:互联网 发布:写微信推文的软件 编辑:程序博客网 时间:2024/06/06 07:37

1.装饰模式

    装饰模式是为了给已有的功能动态的添加额外的功能的一种方式。装饰模式比继承更加灵活。

2.装饰模式实例

      装饰模式设计的 UML图如下:



抽象类Component.java如下:

package com.uestc.decorator;public abstract class  Component {public abstract void operator();}


具体类ConcreteComponent.java如下:

package com.uestc.decorator;public class ConcreteComponent extends Component {@Overridepublic void operator() {System.out.println("小馬装扮完毕!");}}

修饰抽象类如下
package com.uestc.decorator;public abstract class Decerator extends Component{Component component;public Decerator(Component component){this.component=component;}public abstract void operator() ;}

修饰具体类ConcreteDecretorA.java 、ConcreteDecretorB.java如下:

package com.uestc.decorator;import java.io.FileInputStream;public class ConcreteDecretorA extends Component {private Component component;public ConcreteDecretorA(Component component) {this.component=component;}public void operator(){System.out.println("小馬穿上白大褂!");if(component!=null){component.operator();}}}


package com.uestc.decorator;public class ConcreteDecoratorB extends Decerator{public ConcreteDecoratorB(Component component){super(component);}public void operator(){System.out.println("小馬穿上TShirt!");if(component!=null)component.operator();}}

主类main.java如下:

package com.main;import com.uestc.decorator.ConcreteComponent;import com.uestc.decorator.ConcreteDecoratorB;import com.uestc.decorator.ConcreteDecretorA;public class Test {/** * @param args */public static void main(String[] args) {System.out.println("小馬装扮开始!");ConcreteComponent component=new ConcreteComponent();ConcreteDecretorA a=new ConcreteDecretorA(component);//给小馬穿上白大褂ConcreteDecoratorB b=new ConcreteDecoratorB(a);//给小馬穿上TShirtb.operator();}}

运行结果如下:

小馬装扮开始!

小馬穿上TShirt

小馬穿上白大褂 

小馬装扮完毕!


3.Java IO

在java io的设计模式就是采用装饰模式,其类图如下:


平时我们在做IO操作时很少单独使用那个类,而是将几个IO类组合起来使用,这就体现了装饰模式的设计思想。