标签:margin 返回 span 顺序 ted .com 子类 职责 color
这是一种比较常见的模式,定义如下:动态的给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更加灵活。
装饰模式有四个基本角色:
Component是一个接口或者是抽象类,就是定义最核心的对象,也就是最原始的对象。
ConcreateComponent是最原始的、最核心的、最基本的接口或抽象类的实现,也是我们需要装饰的对象。
这一般是一个抽象类,用来干什么呢?定义装饰角色的抽象方法,在属性中必然有一个指向Component抽象构件的的private变量。
用于把最原始、最核心、最基本的东西装饰为其他东西。
下面看一段通用示例代码:
//抽象构件 public abstract class Component{ public abstract void operate(); } //具体构件 public class ConcreateComponent extends Component{ @Override public void operate(){ } } //抽象装饰者 public abstract class Decorator extends Component{ private Component component = null; //通过构造函数传递被修饰者 public Decorator(Component component){ this.component = component; } //委托给被修饰者执行 public void operate(){ this.component.operate(); } } //具体的装饰类 public class ConcreateDecorator1 extends Decorator{ //定义被修饰者 public ConcreateDecorator1(Component component){ super(component); } //定义自己的修饰方法 priate void method1(){ } //重写父类方法 public void operate(){ this.method1(); super.operate(); } } public class ConcreateDecorator2 extends Decorator{ //定义被修饰者 public ConcreateDecorator2(Component component){ super(component); } //定义自己的修饰方法 private void method2(){ } //重写父类方法 public void operate(){ this.method2(); super.operate(); } }
需要注意的是,原始方法和装饰方法的执行顺序在具体的装饰类中是固定的,但可以通过重载实现多种顺序的组合。
装饰模式优点:
装饰模式缺点:
装饰模式场景:
标签:margin 返回 span 顺序 ted .com 子类 职责 color
原文地址:https://www.cnblogs.com/loveBolin/p/9736057.html