设计模式之一致性_Decorator装饰器模式_装饰边框和内容的一致性
前言
博主个人博客http://blog.healerjean.com
1、Decorator装饰器模式
1.1、解释
假如现在有一块蛋糕
1、如果只涂上奶油,其他什么都不加,就是奶油蛋糕。
2、如果加上草莓,就是草莓奶油蛋糕。
3、如果再加上一块黑色巧克力板,上面用白色巧克力写上姓名,然后插上代表年龄的蜡烛,就变成了一块生日蛋糕。
像这样不断地为对象添加装饰的设计模式被称为Decorator模式 ,Decorator 指的是装饰。
1.1.1、适配器和装饰器的区别
装饰器与适配器都有一个别名叫做 包装模式(Wrapper),它们看似都是起到包装一个类或对象的作用,但是使用它们的目的很不一一样。
1、适配器模式的意义是要将一个接口转变成另一个接口
2、装饰器模式不是要改变被装饰对象的接口,而是恰恰要保持原有的接口
1.2、示例代码
1.2.1、功能接口ShapeInter
public interface ShapeInter {
void draw();
}
1.2.1.2、功能1 实现类RectangleImpl
public class RectangleImpl implements ShapeInter {
@Override
public void draw() {
System.out.println("Shape: Rectangle");
}
}
1.2.1.3、功能2 实现类 CircleImpl
public class CircleImpl implements ShapeInter {
@Override
public void draw() {
System.out.println("Shape: Circle");
}
}
1.2.2、抽象装饰器
public abstract class AbstractShapeDecorator implements ShapeInter {
protected ShapeInter shapeInter;
public AbstractShapeDecorator(ShapeInter shapeInter) {
this.shapeInter = shapeInter;
}
@Override
public void draw() {
shapeInter.draw();
}
}
1.2.3、装饰器结果
public class RedShapeDecorator extends AbstractShapeDecorator {
public RedShapeDecorator(ShapeInter shapeInter) {
super(shapeInter);
}
@Override
public void draw() {
shapeInter.draw();
ok();
}
private void ok(){
System.out.println("Border Color: Red");
}
}
1.2.4、测试
package com.hlj.moudle.design.D05_一致性.D12Decorator适配器模式;
public class Main {
public static void main(String[] args) {
ShapeInter circle = new CircleImpl();
System.out.println("Circle with normal border");
circle.draw();
AbstractShapeDecorator redCircle = new RedShapeDecorator(new CircleImpl());
System.out.println("\nCircle of red border");
redCircle.draw();
AbstractShapeDecorator redRectangle = new RedShapeDecorator(new RectangleImpl());
System.out.println("\nRectangle of red border");
redRectangle.draw();
}
}