设计模式实践-抽象工厂
场景
定义厂家接口,每个厂家可以生产自己的仪表和传感器
实现代码
仪表接口:
namespace DesignPatterns.FactoryBase
{
/// <summary>
/// 仪表接口
/// </summary>
public interface IMeter
{
/// <summary>
/// 显示仪表类型
/// </summary>
void ShowType();
}
}
仪表A实现:
using System;
namespace DesignPatterns.FactoryBase
{
/// <summary>
/// 仪表类型A
/// </summary>
internal class MeterA : IMeter
{
/// <summary>
/// 显示仪表类型
/// </summary>
public void ShowType()
{
Console.WriteLine("Type A");
}
}
}
仪表B实现:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DesignPatterns.FactoryBase
{
/// <summary>
/// 仪表类型B
/// </summary>
internal class MeterB : IMeter
{
/// <summary>
/// 显示仪表类型
/// </summary>
public void ShowType()
{
Console.WriteLine("Type B");
}
}
}
传感器接口:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DesignPatterns.FactoryBase
{
/// <summary>
/// 传感器接口
/// </summary>
public interface ISensor
{
/// <summary>
/// 显示传感器类型
/// </summary>
void ShowType();
}
}
传感器A实现:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DesignPatterns.FactoryBase
{
/// <summary>
/// 传感器类型A
/// </summary>
internal class SensorA : ISensor
{
/// <summary>
/// 显示传感器类型
/// </summary>
public void ShowType()
{
Console.WriteLine("Sensor A");
}
}
}
传感器B实现:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DesignPatterns.FactoryBase
{
/// <summary>
/// 传感器类型B
/// </summary>
internal class SensorB : ISensor
{
/// <summary>
/// 显示传感器类型
/// </summary>
public void ShowType()
{
Console.WriteLine("Sensor B");
}
}
}
工厂接口:
using DesignPatterns.FactoryBase;
namespace DesignPatterns.AbstarctFactory
{
/// <summary>
/// 工厂接口
/// </summary>
public interface IFactory
{
/// <summary>
/// 生产仪表
/// </summary>
/// <returns>仪表类型</returns>
IMeter CreateMeter();
/// <summary>
/// 生产传感器
/// </summary>
/// <returns>传感器类型</returns>
ISensor CreateSensor();
}
}
A工厂实现:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using DesignPatterns.FactoryBase;
namespace DesignPatterns.AbstarctFactory
{
/// <summary>
/// A工厂类
/// </summary>
public class FactoryA : IFactory
{
/// <summary>
/// 生产仪表
/// </summary>
/// <returns>仪表类型A</returns>
public IMeter CreateMeter()
{
return new MeterA();
}
/// <summary>
/// 生产传感器
/// </summary>
/// <returns>传感器类型A</returns>
public ISensor CreateSensor()
{
return new SensorA();
}
}
}
B工厂实现:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using DesignPatterns.FactoryBase;
namespace DesignPatterns.AbstarctFactory
{
/// <summary>
/// B工厂类型
/// </summary>
public class FactoryB : IFactory
{
/// <summary>
/// 生产仪表
/// </summary>
/// <returns>仪表类型B</returns>
public IMeter CreateMeter()
{
return new MeterB();
}
/// <summary>
/// 生产传感器
/// </summary>
/// <returns>传感器类型B</returns>
public ISensor CreateSensor()
{
return new SensorB();
}
}
}
相关调用
var factoryA = new FactoryA();
var factoryB = new FactoryB();
var meterA = factoryA.CreateMeter();
var sensorA = factoryA.CreateSensor();
meterA.ShowType();
sensorA.ShowType();
var meterB = factoryB.CreateMeter();
var sensorB = factoryB.CreateSensor();
meterB.ShowType();
sensorB.ShowType();
Out:
Meter A
Sensor A
Meter B
Sensor B