设计模式(11)-装饰模式

定义
装饰模式旨在通过装饰对象横向扩展被装饰对象的功能.
装饰模式和代理模式有些类似,但代理模式旨在屏蔽对原对象的访问,装饰模式旨在功能扩展.

实例
原对象具有绘制圆形的功能,现在想要增加为圆形上色的功能.即可通过装饰模式解决.如果增加子类,当需要不定期扩展的功能很多时,子类的数量会极速膨胀.

1.抽象构件类

public abstract class Component {
    public abstract void drawCircle();  //绘制圆形
}

2.具体构件类(被装饰类)

public class ConcreteComponent extends Component{
    @Override
    public void drawCircle() {
        System.out.println("圆形绘制中!!!");
    }
}

3.抽象装饰类

public abstract class Decorator extends Component{
    private Component component = null;

    //构造函数传入Component
    public Decorator(Component component){
        this.component = component;
    }

    public void drawCircle() {
        component.drawCircle();
    }
}

4.具体装饰类

public class AddColorDecorator extends Decorator{
    public AddColorDecorator(Component component) {
        super(component);
    }

    public void addColor(String color){
        System.out.println("绘制颜色为"+color+"!!!");
    }

    public void drawCircle(){
        super.drawCircle();
        this.addColor("红色");
    }
}

5.运行

public class Client {
    public static void main(String[] args) {
        //创建具体被装饰对象
        Component comp = new ConcreteComponent();
        //传入被装饰对象构造装饰对象
        comp = new AddColorDecorator(comp);
        //通过装饰对象调用方法
        comp.drawCircle();
    }
}

猜你喜欢

转载自blog.csdn.net/chixiaoen/article/details/79400160