设计模式实践-工厂模式

场景

没种仪表工厂都实现了生产仪表的接口,不同的工厂生产不同仪表

实现代码

仪表接口:

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 DesignPatterns.FactoryBase;

namespace DesignPatterns.Factory
{
    /// <summary>
    /// 工厂接口
    /// </summary>
    public interface IMeterFactory
    {
        /// <summary>
        /// 生产仪表
        /// </summary>
        /// <returns>仪表类型</returns>
        IMeter CreateMeter();
    }
}

A工厂实现:

using DesignPatterns.FactoryBase;

namespace DesignPatterns.Factory
{
    /// <summary>
    /// 仪表A工厂类
    /// </summary>
    public class MeterAFactory : IMeterFactory
    {
        /// <summary>
        /// 生产类型A仪表
        /// </summary>
        /// <returns>类型A仪表</returns>
        public IMeter CreateMeter()
        {
            return new MeterA();
        }
    }
}

B工厂实现:

using DesignPatterns.FactoryBase;

namespace DesignPatterns.Factory
{
    /// <summary>
    /// 仪表B工厂类
    /// </summary>
    public class MeterBFactory : IMeterFactory
    {
        /// <summary>
        /// 生产类型B仪表
        /// </summary>
        /// <returns>类型B仪表</returns>
        public IMeter CreateMeter()
        {
            return new MeterA();
        }
    }
}

相关调用

	IMeterFactory meterAFactory = new MeterAFactory();
    IMeterFactory meterBFactory = new MeterBFactory();
    var meterA = meterAFactory.CreateMeter();
    var meterB = meterBFactory.CreateMeter();
    meterA.ShowType();
    meterB.ShowType();

Out:

Type A
Type B
posted @ 2016-07-09 00:11  4Thing  阅读(119)  评论(0编辑  收藏  举报