原创:花括号MC(微信公众号:huakuohao-mc),欢迎分享,转载请保留出处。
装饰模式主要用于在不改变类和对象的结构情况下,增加一些额外的功能。主要实现思路是定义一个装饰类,把原始类包含进来并提供额外的功能。
举个例子
假设有个图形类,可以画出对应的图形图案。在不改变原有图形类的情况下,如果希望给图形增加颜色,就可以考虑使用装饰模式。
先来看一下UML
类图:
再来看一下具体代码实现逻辑。
图形接口,实现画图功能。
public interface Shape {
void draw();
}
复制代码
一个Circle
类 实现圆形
public class Circle implements Shape {
@Override
public void draw() {
System.out.println("Shape: Circle");
}
}
复制代码
定义一个图形装饰类,实现着色功能,先定义一个抽象的基础装饰类,该装饰类将原始类包含进来,其子类实现具体的颜色着色。
public abstract class ShapeDecorator implements Shape {
//引用shap类
protected Shape decoratedShape;
public ShapeDecorator(Shape decoratedShape) {
this.decoratedShape = decoratedShape;
}
@Override
public void draw() {
decoratedShape.draw();
}
}
复制代码
具体着色子类 RedShapeDecorator
,实现具体着色功能。
public class RedShapeDecorator extends ShapeDecorator {
public RedShapeDecorator(Shape decoratedShape) {
super(decoratedShape);
}
@Override
public void draw() {
decoratedShape.draw();
//增加装饰功能
setRedBorder(decoratedShape);
}
//私有着色方法
private void setRedBorder(Shape decoratedShape){
System.out.println("Border Color: Red");
}
}
复制代码
客户端代码这样使用
public class DecoratorPatternDemo {
public static void main(String[] args){
Shape circle = new Circle();
//被装饰类修饰的Cirle,画出的圆是红色的。
Shape redCircle = new RedShapeDecorator(new Circle());
//普通圆
circle.draw();
//红色的圆
redCircle.draw();
}
}
复制代码
总结
装饰模式是结构模式之一,主要用于解决在不改变原有类和对象的结构情况下,给类和对象增加一些有用的小功能。
本文参考 www.tutorialspoint.com/design_patt…
推荐阅读
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END