转载

创建型模式(三)抽象工厂

一句话的概要

创建一组产品,把实现具体产品创建推迟到子类中。不需要关心实际生产的具体产品是什么。

剧情

上回,我们说到屌丝小明同学。凭借一个蛋糕成功取得了女神的青睐,答应交往。今天是他们第一次进行约会。

小明同学单身狗太久,不知道应该怎么办。所以他下载了恋爱管家APP。

PS:恋爱管家是我正在开发中的一款APP和微信订阅号,到时候开发完整,第一时间在博客园告知,并发布源码。

选择了恋爱计划A,带女神吃饭、看电影、嘿嘿嘿。完成了完美的第一次约会。

恋爱计划分两步。第一吃饭,第二看电影。接下来,我们试着用抽象工厂,完成这个剧情。

任务一:创建看电影的必要条件

首先创建一个电影的抽象类。

public abstract class Movie     {         public abstract void GoMovie();     }

接下来,我们分别创建两家影院来提供。一家是UME,一家是万达国际影城

public class UMEMovie : Movie {  public override void GoMovie()  {   Console.WriteLine("出发去UME国际影城,看电影");  } } public class WanDaMovie : Movie {  public override void GoMovie()  {   Console.WriteLine("出发去万达国际影城,看电影");  } } 

这里我们看电影的准备,就可以OK了。接下来我们准备吃饭

任务二:创建吃饭的必要条件

首先创建一个吃饭的抽象类

public abstract class Eat     {         public abstract void GoEat();     }

接下来,我们分别创建肯德基和麦当劳来提供服务。

public class Mc : Eat {  public override void GoEat()  {   Console.WriteLine("出发去麦当劳,吃饭");  } } public class Kfc : Eat {  public override void GoEat()  {   Console.WriteLine("出发去肯德基,吃饭");  } } 

代码很简单,不多说别的。这里我们的吃饭必要条件就算完成了。

任务三:创建恋爱管家并制定A、B计划

创建恋爱管家抽象类

public abstract class LoveManageApp     {         public abstract Movie ReadMovie();         public abstract Eat ReadEat();     }

不管A计划和B计划,都实现看电影和吃饭两个功能。下面我们来制定A、B计划

public class LoveManageA : LoveManageApp {  public override Eat ReadEat()  {   return new Mc();  }  public override Movie ReadMovie()  {   return new UMEMovie();  } } public class LoveManageB : LoveManageApp {  public override Eat ReadEat()  {   return new Kfc();  }  public override Movie ReadMovie()  {   return new WanDaMovie();  } } 

A计划,去麦当劳吃饭然后去UME。B计划,去肯德基吃饭然后去万达影城。代码很简单,不多说。

至此,约会必要的条件已经构成。我们让小明同学制定A计划进行约会。

static void Main(string[] args) {  Console.WriteLine("小明第一次跟女神约会");  Console.WriteLine("由于小明是个小屌丝,所以他使用了恋爱管家APP帮助他制定的A计划");  LoveManageApp app = new LoveManageA();  Console.WriteLine("A计划开始");  Console.WriteLine("我们先吃个饭吧");  Eat eat = app.ReadEat();  eat.GoEat();  Console.WriteLine("我们看个电影吧");  Movie mo = app.ReadMovie();  mo.GoMovie();  Console.WriteLine("我们嘿嘿嘿吧...........啪~~~...我擦真打啊..");  Console.ReadLine(); } 

创建型模式(三)抽象工厂

总结

抽象工厂和工厂模式最大的区别,就是抽象工厂可以创建一组产品。而且符合开闭原则。

常用场景:一个接口可以提供一个产品组,且不必知道产品的具体实现

选择关键点:产品组是否需要一起提供,且是否有一致的接口。

By~

正文到此结束
Loading...