Java设计模式之装饰者模式
来源:互联网 发布:淘宝手机店铺装修素材 编辑:程序博客网 时间:2024/06/16 10:20
装饰模式(Decorator):动态地给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更为灵活。
Component是定义一个对象接口,可以给这些对象动态地添加职责:
public abstract class Component {//Component是定义一个对象接口,可以给这些对象动态地添加职责 public abstract void operation();}
public class ConcreteComponent extends Component {//ConcreteComponent是定义一个具体的对象,也可以给这个对象添加一些职责 @Override public void operation() { System.out.println("具体对象的操作"); }}Decorator,装饰抽象类:
/** * Decorator,装饰抽象类,继承了Component,从外类来扩展Component类的功能,但对于Component来说, * 是无需知道Decorator的存在的 */public abstract class Decorator extends Component { protected Component component; public Component getComponent() { return component; } public void setComponent(Component component) { this.component = component; } @Override public void operation() { if (component != null) { component.operation(); } }}class ConcreteDecoratorA extends Decorator { private String addedState; @Override public void operation() { // 首先运行原Component的operation(),再执行本类的功能,如addedState,相当于对原Component进行了装饰 super.operation(); addedState = "A中的new state "; System.out.println(addedState + "具体装饰对象A的操作"); }}class ConcreteDecoratorB extends Decorator { @Override public void operation() { super.operation(); addedBehavior(); System.out.println("具体装饰对象B的操作"); } public void addedBehavior() { System.out.print("B中的新增行为 "); }}class ConcreteDecoratorC extends Decorator { @Override public void operation() { super.operation(); System.out.println("C没有特殊行为 " + "具体装饰对象C的操作"); }}
装饰模式客户端调用代码:
/** * 装饰模式客户端调用代码,装饰的过程更像是层层包装,用前面的对象装饰后面的对象 */public class DecoratorClient { public static void main(String[] args) { ConcreteComponent concreteComponent = new ConcreteComponent(); ConcreteDecoratorA concreteDecoratorA = new ConcreteDecoratorA(); ConcreteDecoratorB concreteDecoratorB = new ConcreteDecoratorB(); ConcreteDecoratorC concreteDecoratorC = new ConcreteDecoratorC(); concreteDecoratorA.setComponent(concreteComponent); concreteDecoratorB.setComponent(concreteDecoratorA); concreteDecoratorC.setComponent(concreteDecoratorB); concreteDecoratorC.operation(); }}
运行结果:
具体对象的操作A中的new state 具体装饰对象A的操作B中的新增行为 具体装饰对象B的操作C没有特殊行为 具体装饰对象C的操作Component 是定义一个对象接口,可以给这些对象动态的添加职责,ConcreteComponent是定义了一个具体的对象,也可以给这个对象添加一些职责。Decorator,装饰抽象类,继承了Component,从外类来扩展Component类的功能,单对于Component来说,是无需知道Decorator的存在的,至于ConcreteDecorator就是具体的装饰对象,起到给Component添加职责的功能。装饰模式是利用SetComponent来对对象进行包装,这样每个装饰对象的实现就和如何使用这个对象分离开了,每个装饰对象只关心自己的功能,不需要关心如何被添加到对象链当中。
阅读全文
1 0
- java设计模式之装饰者模式
- Java设计模式之装饰者模式
- java设计模式之装饰者模式
- Java设计模式之装饰者模式
- Java设计模式之装饰者模式
- Java设计模式之装饰者模式
- java设计模式之装饰者模式
- Java设计模式之装饰者模式
- Java设计模式之装饰者模式
- java设计模式之装饰者模式
- java设计模式之------装饰者模式
- Java设计模式之装饰者模式
- java设计模式之装饰者模式
- Java 设计模式之 -- 装饰者模式
- java设计模式之装饰者模式
- Java设计模式之---装饰者模式
- java设计模式之装饰者模式
- java设计模式之装饰者模式
- NIO入门分享
- 线性表的相关介绍
- Kotlin中Application的实例写法
- 字符串的修改
- 评价Logistic回归模型优劣的两个重要参数AIC和BIC
- Java设计模式之装饰者模式
- lombok-程序员不想错过的好工具
- spark中split()特殊符号"." "|" "*" "\" "]"
- JobScheduler5.0源码分析
- Spring学习,@Resource,@Autowried,@Inject
- android实现拍照并转换为base64
- Feign
- PAT 1017. A除以B
- 数据结构JavaScript——集合