天天看點

模式說法之——裝飾

我們通常可以使用繼承來實作功能的拓展,如果這些需要拓展的功能的種類很繁多,那麼勢必生成很多子類,增加系統的複雜性,同時,使用繼承實作功能拓展,我們必須可預見這些拓展功能,這些功能是編譯時就确定了,是靜态的。

動态地給一個對象添加一些額外的職責。就增加功能來說,Decorator模式相比生成子類更為靈活。

模式說法之——裝飾

(一)代碼

public abstract class Component

    {

        public abstract void Do1();

        public abstract void Do2();

    }

    public class ConcreteComponent : Component

        public override void Do1()

        {

            Console.WriteLine("第一件事。");

        }

        public override void Do2()

            Console.WriteLine("第二件事。");

    public abstract class Decorator : Component

        Component _component;

        public Decorator(Component component)

            _component = component;

            _component.Do1();

            _component.Do2();

    public class ConcreteDecorator1 : Decorator

        public ConcreteDecorator1(Component component):base(component)

        {

            base.Do1();

            Console.WriteLine("聽着音樂!");

    public class ConcreteDecorator2: Decorator

        public ConcreteDecorator2(Component component)

            : base(component)

            Console.WriteLine("吃着零食!");

(二)測試

[Test]

        public void TestDecorator()

            Component c1 = new ConcreteComponent();

            Decorator.Decorator d = new ConcreteDecorator1(c1);

            d.Do1();

結果:

第一件事。聽着音樂!

部落格園大道至簡

<a href="http://www.cnblogs.com/jams742003/" target="_blank">http://www.cnblogs.com/jams742003/</a>

轉載請注明:部落格園

繼續閱讀