设计模式实践-抽象工厂

场景

定义厂家接口,每个厂家可以生产自己的仪表和传感器

实现代码

仪表接口:

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
posted @ 2016-07-09 23:45  4Thing  阅读(145)  评论(0编辑  收藏  举报