在工厂模式中,产品和工厂是一一对应的,当产品较多时,这使得代码的复杂且冗余,抽象工厂在类内部对同一个产品族的产品进行共同管理,这样可以不必引入多个新的类进行管理。
示例如下:
namespace Designmode.AbstractFactory
{
/// <summary>
/// 手机的抽象类
/// </summary>
public interface IPhone
{
/// <summary>
/// 手机发信息
/// </summary>
void SendMessage();
}
}
namespace Designmode.AbstractFactory
{
/// <summary>
/// 小米手机具体实现类
/// </summary>
public class XiaoMiPhone : IPhone
{
/// <summary>
/// 产品A的方法实现
/// </summary>
public void SendMessage()
{
Console.WriteLine($"XiaoMi Send Message.");
}
}
}
namespace Designmode.AbstractFactory
{
/// <summary>
/// 华为手机具体实现类
/// </summary>
public class HuaWeiPhone : IPhone
{
/// <summary>
/// 产品B的方法实现
/// </summary>
public void SendMessage()
{
Console.WriteLine($"HuaWei Send Message.");
}
}
}
namespace Designmode.AbstractFactory
{
/// <summary>
/// 笔记本抽象类
/// </summary>
public interface INoteBook
{
/// <summary>
/// 笔记本启动
/// </summary>
void StartUp();
}
}
namespace Designmode.AbstractFactory
{
/// <summary>
/// 小米笔记本具体实现类
/// </summary>
public class XiaoMiNoteBook : INoteBook
{
/// <summary>
/// 笔记本开机
/// </summary>
public void StartUp()
{
Console.WriteLine($"XiaoMi 笔记本开机.");
}
}
}
namespace Designmode.AbstractFactory
{
/// <summary>
/// 华为笔记本具体实现类
/// </summary>
public class HuaWeiNoteBook : INoteBook
{
/// <summary>
/// 笔记本开机
/// </summary>
public void StartUp()
{
Console.WriteLine($"HuaWei 笔记本开机.");
}
}
}
namespace Designmode.AbstractFactory
{
/// <summary>
/// 工厂抽象类
/// </summary>
public interface IFactory
{
/// <summary>
/// 工厂类生产手机
/// </summary>
/// <returns></returns>
IPhone ProductPhone();
/// <summary>
/// 工厂类生产笔记本电脑
/// </summary>
/// <returns></returns>
INoteBook ProductNoteBook();
}
}
namespace Designmode.AbstractFactory
{
/// <summary>
/// HuaWei工厂
/// </summary>
public class HuaWeiFactory : IFactory
{
/// <summary>
/// 生产手机
/// </summary>
/// <returns>返回华为手机</returns>
public IPhone ProductPhone()
{
return new HuaWeiPhone();
}
/// <summary>
/// 生产笔记本
/// </summary>
/// <returns>返回华为笔记本</returns>
public INoteBook ProductNoteBook()
{
return new HuaWeiNoteBook();
}
}
}
namespace Designmode.AbstractFactory
{
/// <summary>
/// xiaomi工厂
/// </summary>
public class XiaoMiFactory : IFactory
{
/// <summary>
/// 生产手机
/// </summary>
/// <returns>返回华为手机</returns>
public IPhone ProductPhone()
{
return new XiaoMiPhone();
}
/// <summary>
/// 生产笔记本
/// </summary>
/// <returns>返回华为笔记本</returns>
public INoteBook ProductNoteBook()
{
return new XiaoMiNoteBook();
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Designmode.AbstractFactory;
namespace Designmode
{
class Program
{
static void Main(string[] args)
{
#endregion
#region 抽象工厂模式
IFactory factory = null;
IPhone phone = null;
INoteBook noteBook = null;
//小米工厂
factory = new XiaoMiFactory();
phone = factory.ProductPhone();
phone.SendMessage();
noteBook = factory.ProductNoteBook();
noteBook.StartUp();
//华为工厂
factory = new HuaWeiFactory();
phone = factory.ProductPhone();
phone.SendMessage();
noteBook = factory.ProductNoteBook();
noteBook.StartUp();
#endregion
}
}
}