-
上一篇博客简单说了一下——简单工厂(江南皮革厂),想了解的可以关注下我的博客,然后翻看下上一篇文章。
-
这里还想多提一嘴,无论单列设计模式还是工厂设计模式其实都是创建型模式。什么叫创建型模式呢,简单的说就是你用了一种固定的模式去new出来了你所需要的类。
-
Ok. fine.接下来开始介绍抽象工厂。先说下抽象工厂和简单工厂的区别哈!其实呢他们的本质是一样的。都是将我们的需要的东西抽象。抽象工厂简单的说就是让我们需要的东西更加抽象,变的更加灵活。概括一下就是又包了一层。没有啥是包一层解决不了的,如果有那就再包一层。
-
老规矩,上代码。本次我们引入 华为工厂和小米工厂举例,两个工厂都会生产对应自己品牌的手机及汽车。先给大家看看我的项目结构,让大家有个大致的概念。
-
-
对照项目结构我先简单介绍一下。首先我创建了一个抽象的工厂,将工厂抽象。然后再分别新建两个小米工厂、华为工厂实现抽象工厂。新建抽象的汽车及手机。然后再新建相对应的小米汽车、小米手机、华为汽车、华为手机。
-
抽象工厂代码块
namespace AbstractFactory
{
public interface IFactory
{
ICar car();
IIphone iphone();
}
}
- 小米工厂代码块
namespace AbstractFactory
{
public class XimiFactory : IFactory
{
public ICar car()
{
return new XiMiCar();
}
public IIphone iphone()
{
return new XiMiIphoen();
}
}
}
- 华为工厂代码块
namespace AbstractFactory
{
public class HWFactory:IFactory
{
public ICar car()
{
return new HWCar();
}
public IIphone iphone()
{
return new HWIphone();
}
}
}
- 抽象手机
namespace AbstractFactory
{
public interface IIphone
{
void CallFriends();
void PlayGame();
void ListenMusic();
}
}
- 抽象汽车
namespace AbstractFactory
{
public interface ICar
{
void OpenCard();
}
}
- 小米手机代码块
namespace AbstractFactory
{
public class XiMiIphoen : IIphone
{
public void CallFriends()
{
Console.WriteLine("用小米手机打给我的女朋友");
}
public void ListenMusic()
{
Console.WriteLine("用小米手机放着音乐");
}
public void PlayGame()
{
Console.WriteLine("用小米手机打游戏");
}
}
}
- 华为手机代码块
namespace AbstractFactory
{
public class HWIphone : IIphone
{
public void CallFriends()
{
Console.WriteLine("用华为手机打给我的女朋友");
}
public void ListenMusic()
{
Console.WriteLine("用华为手机放着音乐");
}
public void PlayGame()
{
Console.WriteLine("用华为手机打游戏");
}
}
}
- 小米汽车代码块
namespace AbstractFactory
{
public class XiMiCar : ICar
{
public void OpenCard()
{
Console.WriteLine("开着小米汽车");
}
}
}
- 华为汽车代码块
namespace AbstractFactory
{
public class HWCar : ICar
{
public void OpenCard()
{
Console.WriteLine("开着华为汽车");
}
}
}
最后我们调用实现一下
namespace AbstractFactory
{
class Program
{
static void Main(string[] args)
{
IFactory factory = new XimiFactory();
factory.car().OpenCard();
factory.iphone().ListenMusic();
Console.ReadKey();
}
}
}
- 好了,到这里抽象工厂的设计基本完毕。对照代码理解一下。抽象工厂确实比简单工厂在实现需要的对应东西上更加的灵活,但是随之而来的也有代码量会增加,所以有利有弊。在实际运用上更多的也是结合我们的实际需求进行合理运用。不然就会出现牛刀杀鸡的现象。但是在学习知识上我们应该庖丁解牛清晰的了解每一个知识点。为的将来更加合理的运用。