码迷,mamicode.com
首页 > 其他好文 > 详细

设计模式之简单工厂

时间:2015-06-03 21:01:56      阅读:143      评论:0      收藏:0      [点我收藏+]

标签:

在开始设计模式不可避免的提到几个面向对象设计原则:1、开闭法则(OCP);2、里氏代换法则(LSP);3、依赖倒置法则(DIP);4、接口隔离法则(ISP);5、合成/聚合复用原则(CARP);6、迪米特法则(LoD)。使用设计模式的目的并非是为了目标的简单化,甚至在某些场景下,过度的使用设计模式会使问题复杂化。在本人看来,设计模式的存在就是为了更好的解决以上6个面向对象设计原则。对于以后的随笔中,我将会在适合的时候对以上设计原则适当的进行阐述。

写下这些东西的目的主要在于总结,本人才疏学浅不敢误人子弟。

 

简单工厂模式是一种很简单的创建型模式,主要为创建对象提供接口。主要有三种角色组成:

工厂类:这是本模式的核心,含有一定的商业逻辑和判断逻辑。往往由一个具体类实现。

抽象产品:它一般是具体产品继承的父类或者实现的接口。可由接口或者抽象类来实现。

具体产品:工厂类所创建的对象就是此角色的实例。由一个具体类实现。

技术分享

可以看出Client有一个对抽象产品IProduct接口以及工厂类的引用,在使用了简单工厂之后,Client不再依赖于具体产品Product的实现。只需要调用Factory的CreateProduct方法即可获取到一个IProduct的引用。

直接上代码:

技术分享
 class Client
    {
        Factory factory = new Factory();
        IProduct product = null;
        public void InitialProduct(string productName)
        {
            product = factory.CreateProduct(productName);
        }

        public void Run()
        {
            if (product != null)
                product.PrintName();
        }
    }



class Factory
    {
        public IProduct CreateProduct(string productName)
        {
            if (productName == "A")
                return new ProductA();
            else if (productName == "B")
                return new ProductB();
            else
                throw new Exception("产品名称错误!");
        }

    }


    interface IProduct
    {
        void PrintName();
    }


    class ProductA:IProduct
    {
        public void PrintName()
        {
            Console.WriteLine("Product A");
        }
    }


    class ProductB:IProduct
    {

        public void PrintName()
        {
            Console.WriteLine("Product B");
        }
    }


    class Program
    {
        static void Main(string[] args)
        {
            Client client = new Client();
            client.InitialProduct("A");
            client.Run();

            client.InitialProduct("B");
            client.Run();

            Console.ReadKey();
        }
    }
View Code

如果在后续的扩展中需要添加ProductC,则只需要修改Factory的CreateProduct实现即可,即实现了解耦。

运行效果:

技术分享

 

设计模式之简单工厂

标签:

原文地址:http://www.cnblogs.com/Jason-han/p/4550113.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!