码迷,mamicode.com
首页 > 其他好文 > 详细

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

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

标签:des   c   style   class   blog   code   

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

类图:

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

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

标签:des   c   style   class   blog   code   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!