.Net设计模式_工厂模式(1)
工厂模式有三个模式:
- 简单工厂(Simple Factory)模式
- 工厂方法(Factory Method)模式
- 抽象工厂(Abstract Factory)模式
1、简单工厂
引言:
我是消费者,我需要一双鞋,我要自己建造。我受不了这个,因为我不知道如何制造鞋。
消费者要求,鞋厂,于是有了工厂,帮助消费者制造鞋。(第一个做工厂人,都是商业头脑发达之人啊)
理解:
有了工厂就好办了,告诉工厂,我要鞋,那么工厂就会给你鞋吗?
还不行,因为鞋有好多种,雨鞋、跑鞋、休闲鞋等,目标太广,无法确认,需要其他详细信息。
那么你告诉鞋厂,要雨鞋,鞋厂就会为你生产一双雨鞋。
代码示例:
public class AShoes { public void Run() { System.Console.WriteLine("A Run"); } }
public class BShoes { public void Run2() { System.Console.WriteLine("B Run"); } }
public class ShoesFactory { public AShoes CreateAShoes() { return new AShoes(); } public BShoes CreateBShoes() { return new BShoes(); } }
static void Main(string[] args) { ShoesFactory factory = new ShoesFactory(); AShoes shoes = factory.CreateAShoes(); shoes.Run(); Console.ReadKey(); }
上面这种模式没有把鞋这种商品写成接口,那么就有一个问题,商品的行为不统一了,如:A鞋能跑,B鞋也能跑,那么在A鞋跑的行为为Run,B鞋跑的行为可以为Run2,这样就导致消费者需要接受很多跑的行为方法(Run、Run2),消费者就肯定不太愿意接受,所以我们需要定义一个接口来定义鞋的行为,然后所有的鞋都继承接口,实现行为(这就类似于行业标准的概念了)
解决方式:
写一个鞋子的接口或者抽象类。
public interface IShoes { void Run(); }
鞋子类都继承它(这个就是制造业中模型的概念了吧)
public class AShoes : IShoes { public void Run() { System.Console.WriteLine("A Run"); } } public class BShoes : IShoes { public void Run() { System.Console.WriteLine("B Run"); } }
工厂生产鞋:
public class ShoesFactory { public static IShoes CreateShoes(String msg) { IShoes obj = null; if (msg == "A") { obj = new AShoes(); } else if (msg == "B") { obj = new BShoes(); }
return obj; } }
消费者使用:
static void Main(string[] args) { IShoes shoes = ShoesFactory.CreateShoes("A"); shoes.Run(); Console.ReadKey(); }
这样就会把商品的行为标准化,消费者就只要了解这个标准的行为就行。
总结:
优点,规范的简单工厂,给商品定义了统一的标准行为,客户只要了解这套行为就可以。
消费者不用考虑如何制造商品,有工厂为消费者制造。
(消费者其实就是我们这些码农)
缺点,就是一旦有新的商品出现,我们就需要去修改工厂,这样工厂的代码可扩展现就很差了。
解决:我们需要把工厂接口化,这样出现新的商品,我们就新建一个商品工厂就可以了。
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。