装饰者模式
一、什么是装饰者?
装饰者模式允许向现有的对象添加新的功能,同时不改变其结构。
属于结构型模式。
创建了一个装饰类,用来包装原有的类,并在保持方法签名完整性的前提下,提供了额外的功能。
二、装饰者的介绍
1. 意图:
动态地给一个对象添加一些额外的职责。
2. 主要解决:
一般情况下,我们想扩展一个类经常使用继承的方式实现,由于继承为类引入了静态特征,并且随着扩展功能的增多,子类会膨胀。
3. 何时使用:
在不想增加很多子类的情况下扩展类
4. 使用场景:
(1) 扩展一个类的功能;(2) 动态增加功能,动态撤销。
三、code display
现在画图形,可以画两种图形:1. 圆形; 2. 正方形
//接口类
public interface Shape {
void draw();
}
//圆形
public class Circle implements Shape{
@Override
public void draw() {
System.out.println("Shape: Circle");
}
}
//正方形
public class Rectangle implements Shape {
@Override
public void draw() {
System.out.println("Shape: Rectangle " );
}
}
现要求,画出来的图形要能够边框要能够有颜色
首先创建一个装饰者类:
//装饰者类
public abstract class ShapeDecorator implements Shape {
public Shape decoratedShape;
public ShapeDecorator(Shape decoratedShape){
this.decoratedShape = decoratedShape;
}
//装饰者类调用接口方法
public void draw(){
decoratedShape.draw();
}
}
//红色装饰者子类
public class RedShapeDecorator extends ShapeDecorator{
/**
* @param decoratedShape
*/
public RedShapeDecorator(Shape decoratedShape) {
super(decoratedShape);
}
@Override
public void draw() {
decoratedShape.draw();
setRedBorder(decoratedShape);
}
public void setRedBorder(Shape decoratedShape){
System.out.println(" Border Color: Red ");
}
}