可乐穿越记之简单工厂
引子:
话说有一天啊,可乐同学正在湖边散步,天有不测风云,一个小孩向他跑来,一下把他撞到水里。可是,岸上人等了半天也没有见他出来,那么他人呢?我们把视角转到一个不知名的时空,不知名的国家,这天皇帝正在祭天,刚读完祭文,一个不明飞行物直接砸到他身上,哦是一个人,谁呢?这就是我们的可乐同学,他穿越了。
可乐同学就成了皇帝的座上宾,这不正和皇帝唠嗑呢。有个大臣进来了,什么事情呢?原来该国要扩建军队,当然要打造许多的武器喽。于是皇帝说,武器当然也要最好的啦。吩咐手下去办了。可是,第二天大臣又跑来了,说老大啊,不带这样的,我们要采购刀,枪,剑,可是最好的店都分布在不同地方,跑来跑去快累死了。
可乐就嘿嘿一笑说道,我有个办法不知当讲否。皇帝说,那你说说看,可乐说道,这个方法就是简单工厂。就是把你们三个店放在一起,要生产什么告诉他们就行了么。皇帝听完说,好办法。
实施
首先我们要建立一个产品标准(接口或者抽象)
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) { } }嘿嘿,现在可以去试试。
总结:
第一点了解简单工厂里面有什么
抽象产品:定义产品标准
具体产品:实现抽象产品(简单讲就是实现具体功能)
具体工厂:通过判断(各种途径),目的就是返回一个具体产品,可以在客户端实现产品。
第二点简单工厂满足了设计模式中的什么原则
封装变化点---就是客户端的需求不同,实现产品不同
倒转性----原来是客户端直接实现产品,而现在产品实现于接口或者抽象
扩展性----可以扩展产品,但是不能扩展工厂(这就是简单工厂的不足之处),也就是你可以增加产品类,只要实现接口就行,但是要改动工厂里面。
第三点不同角度看简单工厂
从客户端来说,对于重复操作更简单,不容易,只需要知道接口和工厂
从产品来说,有了归属感
从工厂角度来说,现实中的工厂也是如此,重复作业,生产同一个产品,而这里工厂里面的方法就是生产机器。
但是,难道这就解决完了么?嘿嘿,当然不啦。。。还有更多问题等待解决,预知如何请听下回分解。
我第一次写我的学习心得,能和大家分享,水平有限,里面可能有很多问题,希望大虾们能提醒我,帮助我,谢谢大家了!我会继续努力的
浙公网安备 33010602011771号