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

装饰模式

一、作用:

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

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

对比生成器模式:

(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

 

你可能感兴趣的:(设计模式)