3.装饰模式

概述:装饰模式是在不必改变原文件和使用继承的情况下,动态的扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。

特点:

1)装饰对象和真实对象有相同的接口。这样客户端对象就可以和真实对象相同的方式和装饰对象交互。

2)装饰对象包含一个真实对象的索引。

3)装饰对象接受搜有的来自客户端的请求。它把这些请求钻发给真实的对象。

4)装饰对象可以在转发这些请求以前或者以后增加一些附加功能。这样就确保了在运行时,不能修改给定的对象的结构就可以在外部增加附加的功能。在面向对象的设计中,通常是通过继承来实现对给定类的功能拓展。

    public abstract class Component
    {
        public abstract void Operation();
    }

    public class ConcreteCompinent : Component
    {

        public override void Operation()
        {
            //具体对象的操作
        }
    }

    public abstract class Decorator : Component
    {
        protected Component component;
        //设置component
        public void SetCom(Component com)
        {
            this.component = com;
        }
        //重写方法,实现执行的是Component的operation()
        public override void Operation()
        {
            if (component!=null)
            {
                component.Operation();
            }
        }
    }


    public class ConcreteDecoratorA : Decorator
    {
        //本类的独有功能区别于ConcreteDecoratorB
        private string addedState;
        public override void Operation()
        {
            //首先运行原Component的OPeration(),再执行本类的功能,如addedState,相当于对原Component进行了装饰
            base.Operation();
            addedState = "New State";
            //具体修饰对象A的操作
            //……
        }

    }

    public class ConcreteDecoratorB : Decorator
    {
        public override void Operation()
        {
            //首先运行原Component的OPeration(),再执行本类的功能,如AddedBehacior(),相当于对原Component进行了装饰
            base.Operation();
            AddedBehacior();
            //具体装饰对象B的操作
        }

        private void AddedBehacior()
        {
            throw new NotImplementedException();
        }
    }

 

posted @ 2012-07-06 15:26  Xyang  阅读(141)  评论(0编辑  收藏  举报
hi