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

xiaoxiao2021-02-28  15

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

装饰者模式(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

转载请注明原文地址: https://www.6miu.com/read-2450248.html

最新回复(0)