当今市场上手机的种类多如牛毛,基本功能都是打电话和发短信,然后,如果是我们生产一款手机,怎样才能让我们的手机拥有自己的卖点,在手机市场上脱颖而出,赢得消费者的青睐呢?

我觉得非常重要的一点就是手机的附加功能,如果我们的手机有很多对用户很实用的附属功能,能够从用户的角度出发,让拥有我们的手机的用户随心所欲,能通过我们的手机解决很多他们想要解决的问题,那么,我觉得我们生产的这款手机一定会有它的卖点。比如视频通话功能,让我们的用户在通话的同时看到对方,能手写,可以满足很多不会打字的五六十年代那长辈们的文字输入,那样的用户体验是不是非常好?

所以,我们应该从手机的附属功能上,即手机装饰上狠下功夫。鉴于此,我也思考了一番,为手机设计了一些附属功能。如下图:

要实现以上手机的装饰,我们先必须弄清楚什么是装饰模式。

我觉得装饰模式就是给对象在已有功能的基础上动态添加一些额外的功能的方式,比如我们设计的手机,一般手机都会最初就具备打电话,发短信的功能,否则的话就不叫手机;然而,这些基础的功能还不是我们的目的,我们目的是要让自己的手机有卖点,就必须添加一些吸引顾客的额外功能,如上图中的游戏,触屏,照相等。然后我们怎样将这些额外功能加到手机上去,将这些额外功能添加到手机的方式就是我们要用到的装饰模式。

下面我们就再来分析分析装饰模式,看看它的结构图。

上图中Component是定义一个对象接口,可以给对象动态地添加职责。ConcreteComponent是定义了一个具体的对象,也可以该这个对象添加职责。Decorator,是装饰抽象类,继承了Component,从外类来拓展Component类的功能,但对于Component来说,是无需知道Decorator的存在的。而ConcreteDecorator就是具体的装饰对象,起到给Component添加职责的功能。

我们这里是设计手机,根据上图,还得搞清楚一个问题,就是我们这里的"手机"类是Component还是ConcreteComponent?这就得注意了,如果只有一个ConcreteComponent类而没有抽象的Component类,那么Decorator类可以是ConcreteComponent的一个子类,同样的道理,如果只有一个ConcreteDecorator类,那么就没有必要建立一个单独的Decorator类,而可以把DecoratorConcreteDecorator的责任合并成一个类。我们就可以利用这么一点,下面我们来设计一下我们的代码结构图:

从上图我们可以看到,最上面是一个手机实体,功能实体继承了手机实体,具体的每一个装饰功能又继承了功能实体。而我们要实现的是不同个体的手机都可以拓展我们的每一个同能,也可以减去每一个同能,而且都可以在客户端控制,这样就已经非常明了了,思路非常清晰。

下面我们看看代码实现:

                                                      

 

先是实现"Mobile"类(ConcreteComponent

public class Mobile

    {

        public Mobile()

        { }

        private string type;

        public Mobile(string type)

        {

            this.type = type;

        }

        public virtual void Show()

        {

            Console.WriteLine(添加的{0}",type);

        }

}

拓展功能类:Decorator

public class Decorator:Mobile

    {

        protected Mobile component;

        //拓展

        public void expand(Mobile component)

        {

            this.component = component;

        }

        //输出

        public override void Show()

        {

            if (component != null)

            {

                component.Show();

            }

        }

 }

 

具体拓展功能类:ConcreteDecorator

    public class Game:Decorator

    {

        public override void Show()

        {

            Console.WriteLine("游戏功能 ");

            base.Show();

        }

    }

    public class Touch : Decorator

    {

        public override void Show()

        {

            Console.WriteLine("触屏功能 ");

            base.Show();

        }

    }

 

曾祥瑚

2010.06.28  15:06

 

public class Photo : Decorator

    {

        public override void Show()

        {

            Console.WriteLine("照相功能 ");

            base.Show();

        }

    }

    public class Memory : Decorator

    {

        public override void Show()

        {

            Console.WriteLine("内存卡扩展功能 ");

            base.Show();

        }

    }

    public class MP3 : Decorator

    {

        public override void Show()

        {

            Console.WriteLine("MP3功能 ");

            base.Show();

        }

    }

    public class Recording : Decorator

    {

        public override void Show()

        {

            Console.WriteLine("录音功能 ");

            base.Show();

        }

    }