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

设计模式开始--装饰模式

时间:2015-03-29 23:32:04      阅读:139      评论:0      收藏:0      [点我收藏+]

标签:

装饰模式

一、作用:

为已有的功能添加新的功能的设计模式,当系统需要新的功能时候,要在原有的基础上增加一点新的功能的时候,也就是装饰一点功能的时候,不需要再原有的代码上进行修改。

装饰的功能就是把核心职责和核心功能划分开了。

对比生成器模式:

(1)生成器模式类执行是有顺序的

(2)装饰模式执行顺序是没有顺序的,是随机的,想怎么装饰就怎么装饰,装饰的是一些无关紧要的事情,核心的代码还是之前的类在做

二、类图

解释一下:

左边两个实现类(ConsoleLogger FileLogger)是核心的实现类,主要的功能都是由这两个实现的

右边两个实现类(UpLogger,XMLLogger)是装饰类,只是加了一些装饰的属性,核心的功能还是左边的那两个类

技术分享

三、实现

1、定义方法的接口

技术分享
public interface ICook {
    public void cook();
}
View Code

2、两个核心实现类

技术分享
public class Cabbage implements ICook {
    @Override
    public void cook() {
        // TODO Auto-generated method stub
        System.out.println("cook cabbage");
    }
}
public class Vegetable implements ICook {
    @Override
    public void cook() {
        // TODO Auto-generated method stub
        System.out.println("cook vegetable");
    }
}
View Code

3、定义Decorator的方式 抽象类

技术分享
public abstract class Decorator implements ICook {
    protected ICook cook;
    public Decorator(ICook cook)
    {
        this.cook = cook;
    }
}
View Code

4、两个实现装饰功能的 实现类

技术分享
public class PepperDecorator extends Decorator {
    public PepperDecorator(ICook cook) {
        super(cook);
    }
    @Override
    public void cook() {
        addPepper();
        cook.cook();
    }
    public void addPepper()
    {
        System.out.println("add some pepper");
    }
}
public class SugarDecorator extends Decorator {

    public SugarDecorator(ICook cook) {
        super(cook);
    }
    @Override
    public void cook() {
        addSugar();
        cook.cook();
    }
    public void addSugar()
    {
        System.out.println("add some sugar");
    }
}
View Code

5、测试类

技术分享
public class Client {

    public static void main(String[] args) {
        Client client = new Client();
        ICook cook = new Cabbage();
        ICook pepper = new PepperDecorator(cook);
        pepper.cook();
    }
}
View Code

 

设计模式开始--装饰模式

标签:

原文地址:http://www.cnblogs.com/sunshisonghit/p/4376503.html

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