设计模式学习笔记(11)——装饰者模式

本人做的设计模式学习笔记系列的博文旨在用于个人学习之用,主要记载自己对设计模式的理解及代码的实现

装饰者模式(Decorator Pattern)

在装饰者模式中涉及的主要角色是抽象构件类(Component)、具体构件类(ConcreteComponent)、抽象装饰类(Decorator)、具体装饰类(ConcreteDecorator)。抽象装饰类和具体构件类都是抽象构件类的子类。具体装饰类是抽象装饰类的子类。以笔杆为抽象构件类,有具体构件类水笔笔杆和圆珠笔笔杆,这两种笔杆都具有颜色的属性,可以设置一个抽象装饰类和具体装饰类为笔杆上色。以下给出demo。

/*
 * 抽象构件类,可以是接口
 * */
abstract class Pen{
    public abstract void create();
}

/*
 * 具体构件类
 * */
class FountainPen extends Pen{

    @Override
    public void create() {
        System.out.println("Pen: FoutainPen");
    }

}

class Pencil extends Pen{

    @Override
    public void create() {
        System.out.println("Pen: Pencil");
    }

}

/*
 * 抽象装饰类
 * */
abstract class ColorDecorator extends Pen{
    //用于维持对抽象构件类的引用
    protected Pen pen;

    public ColorDecorator(Pen pen){
        //注入赋值
        this.pen=pen;
    }

    public void create(){
        pen.create();
    }
}

/*
 * 具体装饰类
 * */
class BlueDecorator extends ColorDecorator{

    public BlueDecorator(Pen pen) {
        super(pen);
    }

    @Override
    public void create(){
        this.setBlueBody(this.pen);
        super.create();
    }

    //设置笔杆为蓝色
    public void setBlueBody(Pen pen){
        System.out.println("Body Color: Blue");
    }
}

public class DecoratorPattern {
    public static void main(String[] args) {
        Pen pen=new BlueDecorator(new Pencil());
        pen.create();

        System.out.println();

        Pen pen1=new BlueDecorator(new FountainPen());
        pen1.create();
    }
}

运行结果

Body Color: Blue
Pen: Pencil

Body Color: Blue
Pen: FoutainPen

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