首页 > 代码库 > 穿什么有这么重要?——装饰模式
穿什么有这么重要?——装饰模式
装饰模式(Decorator):动态地给一个对象添加一些额外的职责,就是增加功能来说,装饰模式比生成子类更为灵活。
装饰模式(Decorator)结构图
Component是定义一个对象接口,可以给这些对象动态地添加职责。ConcreteComponent是定义了一个具体的对象,也可以给这个对象添加一些职责。Decorator装饰抽象类,继承了Component,从外类来扩展Component类的功能,但对于Component来说,是无需知道Decorator的存在的。至于ConcreteDecorator就是具体的装饰对象,起到给Component添加职责的功能。
Component类
abstract class Component{ public abstract void Operation();}
ConcreteComponent类
class ConcreteComponent extends Component{ public void Operation(){ //具体对象的操作 }}
Decorator类
class Decorator extends Component{ protected Component component; public void SetComponet(Component component){ this.component = component; } public void Operation(){ if(component != null){ component.Operation(); } } }
ConcreteDecoratorA类
class ConcreteDecoratorA extends Decorator{ private string addedState; base.Operation(); addedState = "New State"; //具体装饰对象A的操作 }class ConcreteDecoratorB extends Decorator{ public void Operation(){ base.Operation(); AddedBehavior(); //具体装饰对象B的操作 } private void AddedBehavior(){ //本类独有的方法,以区别与ConcreteDecoratorA } }
客户端代码:
static void Main(String[] args){ ConcreteComponent c = new ConcreteComponent(); ConcreteDecoratorA d1 = new ConcreteDecoratorA(); ConcreteDecoratorB d2 = new ConcreteDecoratorB(); //装饰方法:首先用ConcreteComponent实例化对象c,然后用ConcreteDecoratorA的实例化对象d1来包装c //然后利用ConcreteDecoratorA的实例化对象d1来包装c,再利用ConcreteDecoratorB的对象d2包装d1, //最终执行d2的Operation() d1.SetComponet(c); d2.SetComponet(d1); d2.Operation();}
装饰模式是利用SetComponent来对对象进行包装,这样每个装饰对象的实现就和如何利用这个对象分离开了,每个装饰对象只关心自己的功能,不需要关心如何被添加到对象链当中。
穿什么有这么重要?——装饰模式
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。