【设计模式】——工厂三姐妹

版权声明:本文为博主原创文章,未经博主允许不得转载。 如有不对,还请指教。 https://blog.csdn.net/z15732621736/article/details/49804565

       工厂三姐妹,指的就是简单工厂模式,工厂方法模式,和抽象工厂模式。他们三个都属于创建型模型,主要用于描述如何创建对象。这三个姐妹之间有相似的地方,也有很多不同的地方,下面让我们来具体看看他们的介绍和区别吧。

1.简单工厂模式

        简单工厂模式(Simple Factory Pattern):定义一个工厂类,它可以根据参数的不同返回不同类的实例,被创建的实例通常都具有共同的父类。因为在简单工厂模式中用于创建实例的方法是静态(static)方法,因此简单工厂模式又被称为静态工厂方法(Static Factory Method)模式,它属于类创建型模式。


简单工厂实现计算器结构图:


 
简单工厂实现计算器代码实例:
public class OperationFactory //简单运算工厂类
    {
        public static operation createoperate(string operate)
        {
            operation oper = null;
            switch (operate )
            {
                case "+":
                    oper =new operationAdd();
                    break ;
                case "-":
                    oper=new operationSub();
                    break;
                case "*":
                    oper =new operationMul ();
                    break ;
                case "/":
                    oper =new operationDiv ();
                    break ;
            }
            return oper ;
        }
}

介绍:
        简单工厂模式:到底要实例化谁,将来会不会增加实例化的对象,比如增加开根运算,这是很容易变化的地方,应该考虑用一个单独的类来做这个创造实力的过程,这就是工厂。


优缺点:

        简单工厂模式的最大优点在于工厂类中包含了必要的逻辑判断,根据客户端的选择条件动态实例化相关的类,对于客户端来说,去除了与具体产品的依赖。

        缺点:当增加功能的同时,就要增加‘case’分支,就要修改原有的类,这样扩展和修改就都开放了!违背了开放-封闭原则。


2.工厂方法模式

       工厂方法模式(Factory Method):定义一个用于创建对象的接口,让子类决定实例化哪一个类,工厂方法是一个类的实例化延迟到其子类。【DP】



 工厂方法模式结构图:


 

工厂方法模式计算器实例结构图:


 
对比:
        工厂方法模式实现时,客户端需要决定实例化哪一个工厂来实现运算类,选择判断的问题还是存在的,也就是说工厂方法把简单工厂的内部逻辑判断移到了客户端代码来进行。你想要加功能,本来是该工厂类,而现在是修改客户端。
        工厂方法克服了简单工厂违背开放-封闭原则的缺点,又保持了封装对象创建过程的优点。他们都是集中了封装了对象的创建,似的要更换对象时,不需要做大的改动就可实现,降低了客户程序与产品对象的耦合。工厂方法模式是简单工厂进一步的抽象和推广。由于使用了多态克服了简单工厂的缺点,但每增加一个产品,也就增加了额外工作量。

3.抽象工厂模式

  

         抽象工厂模式(Abstract Factory):提供一个创建一系列相关或相互依赖对象的接口而无需制定他们具体的类。【DP】


抽象工厂模式结构图:


 
数据库的更改实例结构图:
 
对比:
        最大的好处是易于交换产品系列,由于具体工厂类,IFactory factory=new AccessFactory(),如在一个应用中只需要在初始化的时候出现一次,这就使得改变一个应用的具体工厂变得非常容易,他只需要改变具体工厂即可使用不同的产品配置。
       第二大好处是他让具体的创建实例过程与客服端分离,客户端是通过他们的抽象接口操作实例,产品的具体类名也别具体工厂的实现分离,不会出现在客户端代码中。

       缺点:此事后需要只能加工功能的时候,比如增加某表的时候,就是要增加某表的三个类,还要修改数据库的三个类,这样大大增加了工作量!

      

4.其中类和接口(接口和接口是怎么联系起来的)

             


猜你喜欢

转载自blog.csdn.net/z15732621736/article/details/49804565
今日推荐