1.装饰模式
装饰模式是为了给已有的功能动态的添加额外的功能的一种方式。装饰模式比继承更加灵活。
2.装饰模式实例
装饰模式设计的 UML图如下:
抽象类Component.java如下:
package com.uestc.decorator;
public abstract class Component {
public abstract void operator();
}
package com.uestc.decorator;
public class ConcreteComponent extends Component {
@Override
public 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);//给小馬穿上TShirt
b.operator();
}
}
运行结果如下:
小馬装扮开始!
小馬穿上TShirt
小馬穿上白大褂
小馬装扮完毕!
3.Java IO
在java io的设计模式就是采用装饰模式,其类图如下:
平时我们在做IO操作时很少单独使用那个类,而是将几个IO类组合起来使用,这就体现了装饰模式的设计思想。