原型模式

故事:

  鞋子厂来了一个订单,需要一批(2双)运动鞋和一批(2双)休闲鞋。需要同样鞋码,但颜色不一样。

  于是,老板决定使用同样的鞋模来生产小样,然后染色。

 

建模:

  鞋子模型(原型) ——》 定码

  运动鞋 ——》染色

  休闲鞋 ——》染色

 

类图:

 

实现:

Shoes

namespace Prototype
{
    public abstract class Shoes
    {
        public int size;
        protected string color;       
        public string Color
        {
            set
            {
                color = Color;
            }
            get
            {
                return color;
            }
        }
        public int Size
        {
            set
            {
                size = Size;
            }
            get
            {
                return size;
            }
        }
        public abstract Shoes Clone(string color);
    }
}

SportShoes

namespace Prototype
{
    class SportShoes:Shoes
    {
        public SportShoes(int size,string color)
        {
            this.size = size;
            this.color = color;
        }

        public override Shoes Clone(string color)
        {
            return new SportShoes(this.size,color);
        }
    }
}

LeisureShoes

namespace Prototype
{
    class LeisureShoes: Shoes
    {
        bool indoor;
        public LeisureShoes(int size, string color, bool indoor)
        {
            this.size = size;
            this.color = color;
            this.indoor = indoor;
        }

        public override Shoes Clone(string color)
        {
            return new LeisureShoes(this.size, color, this.indoor);
        }
    }
}

Program

namespace Prototype
{
    class Program
    {
        static void Main(string[] args)
        {
            SportShoes shoes = new SportShoes(43,"Red");     
            SportShoes secondShoes = (SportShoes)shoes.Clone("Black");

            LeisureShoes leisureShoes = new LeisureShoes(39, "Black", true);
            LeisureShoes secondLeisureShoes = (LeisureShoes)leisureShoes.Clone("White");

            ArrayList al = new ArrayList();
            al.Add(shoes);
            al.Add(secondShoes);
            al.Add(leisureShoes);
            al.Add(secondLeisureShoes);

            foreach (Shoes i in al)
            {
                Console.WriteLine("Size:{0},Color:{1}", i.Size, i.Color);
            }
        }
    }
}

 

效果:

posted on 2012-10-04 22:41  caigen  阅读(227)  评论(0编辑  收藏  举报