可乐穿越记之简单工厂

 

引子:

     话说有一天啊,可乐同学正在湖边散步,天有不测风云,一个小孩向他跑来,一下把他撞到水里。可是,岸上人等了半天也没有见他出来,那么他人呢?我们把视角转到一个不知名的时空,不知名的国家,这天皇帝正在祭天,刚读完祭文,一个不明飞行物直接砸到他身上,哦是一个人,谁呢?这就是我们的可乐同学,他穿越了。

    可乐同学就成了皇帝的座上宾,这不正和皇帝唠嗑呢。有个大臣进来了,什么事情呢?原来该国要扩建军队,当然要打造许多的武器喽。于是皇帝说,武器当然也要最好的啦。吩咐手下去办了。可是,第二天大臣又跑来了,说老大啊,不带这样的,我们要采购刀,枪,剑,可是最好的店都分布在不同地方,跑来跑去快累死了。

   可乐就嘿嘿一笑说道,我有个办法不知当讲否。皇帝说,那你说说看,可乐说道,这个方法就是简单工厂。就是把你们三个店放在一起,要生产什么告诉他们就行了么。皇帝听完说,好办法。

 

实施

   首先我们要建立一个产品标准(接口或者抽象)

 public interface Arms
    {
         void use();
         void GetNumber();
    }

 

  然后就要知道我们具体产品

  有使用和显示属性的方法, 长度和重量的属性

    public class Spear:Arms
    {
        public void use()
        {
            Console.WriteLine("hit people with Spear");
        }
        public int length;
        public int weight;
        public void GetNumber()
        {
            Console.WriteLine("length:" + this.length);
            Console.WriteLine("weigth:" + this.weight);
        }
                public Spear(int length_,int weight_)
        {
            this.length = length_;
            this.weight = weight_;
        }
    }
    public class Sabre :Arms
    {
        public void use()
        {
            Console.WriteLine("hit people with Sabre");
        }
        public int length;
        public int weight;
        public void GetNumber()
        {
            Console.WriteLine("length:" + this.length);
            Console.WriteLine("weigth:" + this.weight);
        }
                public Sabre(int length_,int weight_)
        {
            this.length = length_;
            this.weight = weight_;
        }
    }
public class Sword:Arms
    {
        public void use()
        {
            Console.WriteLine("hit people with Sword");
        }
        public int length;
        public int weight;
        public void GetNumber()
        {
            Console.WriteLine("length:"+this.length);
            Console.WriteLine("weigth:"+this.weight);
        }
        public Sword(int length_,int weight_)
        {
            this.length = length_;
            this.weight = weight_;
        }
    }

  既然建好了产品,最后就是我们的工厂

工厂中通过判断 分别去返回产品接口类,用来实现

最后一个是错误时候出现什么(简单的可以用Switch)

 public class ArmsFactory
    {
        public Arms Factory(string name,int length,int weight)
        {
            if (name.Equals("Sword"))
            {
                return new Sword(length,weight);
            }
            else if (name.Equals("Spear"))
            {
                return new Spear(length,weight);
            }
            else if(name.Equals("Sabre"))
            {
                return new Sabre(length,weight);
            }
            else
            {
                throw new error(name); 
            }
        }
}
public class error:Exception
    {
        
        public error(string name):base(name)
        {
            
        }
    }

  嘿嘿,现在可以去试试。

总结:

第一点了解简单工厂里面有什么

抽象产品:定义产品标准

具体产品:实现抽象产品(简单讲就是实现具体功能)

具体工厂:通过判断(各种途径),目的就是返回一个具体产品,可以在客户端实现产品。

第二点简单工厂满足了设计模式中的什么原则

封装变化点---就是客户端的需求不同,实现产品不同

倒转性----原来是客户端直接实现产品,而现在产品实现于接口或者抽象

扩展性----可以扩展产品,但是不能扩展工厂(这就是简单工厂的不足之处),也就是你可以增加产品类,只要实现接口就行,但是要改动工厂里面。

第三点不同角度看简单工厂

从客户端来说,对于重复操作更简单,不容易,只需要知道接口和工厂

从产品来说,有了归属感

从工厂角度来说,现实中的工厂也是如此,重复作业,生产同一个产品,而这里工厂里面的方法就是生产机器。

但是,难道这就解决完了么?嘿嘿,当然不啦。。。还有更多问题等待解决,预知如何请听下回分解。

 

 

我第一次写我的学习心得,能和大家分享,水平有限,里面可能有很多问题,希望大虾们能提醒我,帮助我,谢谢大家了!我会继续努力的

posted on 2010-01-29 16:27  可乐龙  阅读(226)  评论(1编辑  收藏  举报

导航