首页 > 代码库 > 装饰模式
装饰模式
从用户的角度看:需要知道基本类和装饰类之间的嵌套关系(大致能添加什么装饰功能) 并且这些装饰规则可以互相嵌套 来实现特定顺序的功能。
从实现者的角度看:让这些类真的可以嵌套
package com.dp.decorator1; /** * 定义了一个对象接口 可以给这些对象动态的添加职责 * @author 黄二狗 * */ public interface Component { void operation(); }
package com.dp.decorator1; /** * 被装饰的基础对象 * @author 黄二狗 * */ public class ConcreteComponent implements Component{ @Override public void operation() { System.out.println("基础操作"); } }
package com.dp.decorator1; /** * 实现了Component 从外类来扩展Component类的功能 但对于Component来说,不需要知道Decorator的存在 * @author 黄二狗 * */ public abstract class Decorator implements Component{ private Component component; public void setComponent(Component component) { this.component=component; } @Override public void operation() { if(component!=null) { component.operation(); } } }
package com.dp.decorator1; /** * 具体的装饰对象,起到给Component添加职责的功能 * 装饰类A可以有自己的一些操作 * @author 黄二狗 * */ public class ConcreteDecoratorA extends Decorator{ //装饰类A的一个状态 private String state="concreteDecorator__A"; @Override public void operation() { super.operation(); System.out.println(state); } }
package com.dp.decorator1; public class ConcreteDecoratorB extends Decorator{ @Override public void operation() { super.operation(); addedBehavior(); } //装饰类B public void addedBehavior() { System.out.println("添加一些额外的行为"); } }
package com.dp.decorator1; /** * 用户需要知道基本类和装饰类之间的嵌套关系 * @author 黄二狗 * */ public class Client { public static void main(String[] args) { //基础类 ConcreteComponent concreteComponent=new ConcreteComponent(); //装饰类A ConcreteDecoratorA decoratorA=new ConcreteDecoratorA(); decoratorA.setComponent(concreteComponent); //装饰类B ConcreteDecoratorB decoratorB=new ConcreteDecoratorB(); decoratorB.setComponent(decoratorA); //装饰链的调用 decoratorB.operation(); } }
装饰模式
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。