一、概念:将对象的创建交给一个叫做工厂的对象来统一进行处理。主要是将对象的依赖关系进行解耦,消除对象之间的直接耦合。
二、模型:
1、逻辑模型
2、物理模型
三、代码实现:
1、抽象工厂代码:
using System; using System.Collections.Generic; using System.Text; namespace ConsoleApplication1 { ////// 水果抽象工厂 /// public abstract class FruitAbstractFactory { ////// 水果名称,表示哪种水果如:苹果、香蕉、橘子 /// public string FruitName { get; set; } ////// 抽象方法,获取要批发水果的 /// ///要批发的水果 public abstract string GetCurrentFruit(); } }
2、苹果工厂代码
using System; using System.Collections.Generic; using System.Text; namespace ConsoleApplication1 { ////// 苹果工厂 /// public class AppleFactory : FruitAbstractFactory { public AppleFactory() { FruitName = "苹果"; } ////// 重写基类的获取水果方法 /// ///要批发的水果 public override string GetCurrentFruit() { return "给你:" + base.FruitName; } } }
3、香蕉工厂代码
using System; using System.Collections.Generic; using System.Text; namespace ConsoleApplication1 { ////// 香蕉工厂 /// public class BananaFactory : FruitAbstractFactory { public BananaFactory() { FruitName = "香蕉"; } public override string GetCurrentFruit() { return "给你:" + base.FruitName; } } }
4、橘子工厂代码
using System; using System.Collections.Generic; using System.Text; namespace ConsoleApplication1 { ////// 橘子工厂 /// public class TangerineFactory : FruitAbstractFactory { public TangerineFactory() { FruitName = "橘子"; } public override string GetCurrentFruit() { return "给你:" + base.FruitName; } } }
5、模拟调用代码
using System; using System.Collections.Generic; using System.Text; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { FruitAbstractFactory fruitfactory = new AppleFactory();//苹果工厂 Console.WriteLine(fruitfactory.GetCurrentFruit()); Console.ReadLine(); fruitfactory = new BananaFactory();//香蕉工厂 Console.WriteLine(fruitfactory.GetCurrentFruit()); Console.ReadLine(); fruitfactory = new TangerineFactory();//橘子工厂 Console.WriteLine(fruitfactory.GetCurrentFruit()); Console.ReadLine(); } } }