首页 > 其他 > 详细

设计模式(八) : 结构型模式--装饰模式

时间:2014-06-01 17:06:09      阅读:435      评论:0      收藏:0      [点我收藏+]

装饰模式的目的是为了给一个对象动态的增加一些功能。装饰对象和被装饰的对象实现同一个接口,装饰对象持有被装饰对象的实例。

类图:

bubuko.com,布布扣

示意性代码:

package com.javadesignpattern.Decorator;

public interface Component {
    
    void sampleOperation();

}
bubuko.com,布布扣
package com.javadesignpattern.Decorator;

public class ConcreteComponent implements Component{

    public void sampleOperation() {
        // TODO Auto-generated method stub
        System.out.println(ConcreteComponent.class + ": sampleOperation function");
    }
}
bubuko.com,布布扣
bubuko.com,布布扣
package com.javadesignpattern.Decorator;

public class Decorator implements Component{
    
    Component component;
    
    public Decorator(Component component){
        this.component = component;
    }
    

    public void sampleOperation() {
        // TODO Auto-generated method stub
        component.sampleOperation();
        System.out.println(Decorator.class + " : sampleOperation function");
    }

}
bubuko.com,布布扣
bubuko.com,布布扣
package com.javadesignpattern.Decorator;

public class ConcreteDecorator extends Decorator{
    Decorator dec;
    
    public ConcreteDecorator(Decorator dec){
        super(dec.component);
        this.dec = dec;
    }
    
    public void sampleOperation(){
        super.sampleOperation();
        System.out.println(ConcreteDecorator.class + " : sampleOperation function");
    }

}
bubuko.com,布布扣
bubuko.com,布布扣
package com.javadesignpattern.Decorator;

public class Client {
    
    public static void main(String[] ags){
        Component componemt = new Decorator(new ConcreteComponent());
        componemt.sampleOperation();        
        System.out.println("--------------------");
        
        Component componemt1 = new ConcreteDecorator(new Decorator(new ConcreteComponent()));
        componemt1.sampleOperation();
        System.out.println("--------------------");
    }

}
bubuko.com,布布扣

装饰模式以这样的形式出现:

new Decorator1(new Decorator2(new Decorator3(new ConcreteComponent())))

装饰模式在什么场景下使用:

1. 需要扩展一个类的功能

2. 动态的给一个对象增加一些功能

3. 需要一些扩展类的功能,但是有很多类,这样使得继承变得不太现实。

 

设计模式(八) : 结构型模式--装饰模式,布布扣,bubuko.com

设计模式(八) : 结构型模式--装饰模式

原文:http://www.cnblogs.com/ChristyorRuth/p/3763393.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!