设计模式之简单工厂模式


简单工厂模式是设计模式中比较常用也比较简单的一种,它并不包含在23中设计模式之中。

下面给出它的一般实现(C#):


namespace ConsoleTest
{
   public class SimpleFactoryTest
    {

        public void Test()
        {
            //生产一辆宝马车,并驾驶
            CarSimpleFactory.Produce("bmw").Drive();

            Console.Read();
        }

    }

    /// <summary>
    /// 表示汽车类的简单工厂。
    /// </summary>
    class CarSimpleFactory
    {
        /// <summary>
        /// 工厂生成汽车的方法。
        /// </summary>
        /// <param name="carName">汽车名称。</param>
        /// <returns>根据汽车名称生成汽车。</returns>
        public static Car Produce(string carName)
        {
            Car car=null;

            switch(carName)
            {
                case "bens":
                    car = new Bens();
                    break;

                case "bmw":
                    car= new BMW();
                    break;

                default:
                    car = new Bens();
                    break;
            }

            return car;
        }
    }

    /// <summary>
    /// 抽象的汽车类。
    /// </summary>
    class Car
    {
        /// <summary>
        /// 汽车的驾驶方法。
        /// </summary>
        virtual public void Drive()
        {
            Console.WriteLine("car drive");
        }
    }

    /// <summary>
    /// 宝马车。
    /// </summary>
    class BMW : Car
    {
        /// <summary>
        /// 宝马车的驾驶方法。
        /// </summary>
        public override void Drive()
        {
            Console.WriteLine("bmw drive");
        }
    }

    /// <summary>
    /// 奔驰车。
    /// </summary>
    class Bens : Car
    {
        /// <summary>
        /// 奔驰车的驾驶方法。
        /// </summary>
        public override void Drive()
        {
            Console.WriteLine("bens drive");
        }
    }
}

优缺点简单分析:

1、该模式属于创建型模式,该模式将对象的创建工作封装起来,可以降低耦合度,并且代码写起来会比较简便。

2、该模式违反了开/闭原则,在上例中如果想增加“大众”汽车,那么就不得不修改工厂的produce方法,不利于扩展。


简单工厂模式就介绍到这里,在后面的文章中会介绍工厂方法模式和抽象工厂模式。

你可能感兴趣的:(设计模式,String,C#,null,Class,扩展)