工厂系列模式总结

一、工厂方法模式

1、简单工厂

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

2就那运算器的例子来说,如果再给程序加‘开方’等功能时,需要我们一定给工厂类的方法里加‘case’语句的,这就违背了,‘开放-封闭’原则。

3)以运算器的图为例

 


//简单工厂模式

    public class OperationFactory

    {

        public static OperationcreateOperate(string operate)

        {

 

            Operation oper = null;

            switch (operate)

            {

                case"+":

                    oper = new OperationAdd();

                    break;

                case"-":

                    oper = new OperatoinSub();

                    break;

                case"*":

                    oper = new OperationMul();

                    break;

                case"/":

                    oper = new OperationDiv();

                    break;

 

            }

            return oper;

        }

    }

 

客户端代码

staticvoid Main(string[] args)

        {

            Operation oper;

            oper =OperationFactory.createOperate("*");

            oper.NumberA = 9;

            oper.NumberB = 2;

            double result = oper.GetResult();

            Console.Write(result);

            Console.ReadLine();

            //ReadLine此句呢,就是可以再F5下停留

        }

2、工厂方法模式

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

2)工厂方法模式机构图


 

3)应用(计算机为例)


    //先构建一个工厂接口

        interface IFactory

        {

            Operation CreateOperation();

        }

 

        //加减乘除个见一个具体工厂去实现这个接口

        class AddFactory : IFactory

        {

            public Operation CreateOperation()

            {

                return new OperationAdd();

            }

        }

 

        class SubFactory : IFactory

        {

            public Operation CreateOperation()

            {

                return new OperationSub();

            }

        }

 

        class MulFactory : IFactory

        {

            public Operation CreateOperation()

            {

                return new OperationMul();

            }

        }

 

        class DivFactory : IFactory

        {

            public Operation CreateOperation()

            {

                return new OperationDiv();

            }

        }

    }

客户端代码

  static void Main(string[] args)

        {

            IFactory operFactory = newAddFactory();

                                                                                                                    oper.NumberB = 2;

            double result = oper.GetResult();

            Console.WriteLine(result );

            Console.Read();

        }

 

 

二、抽象工厂模式

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

2)以不同数据库中的两种表为例

工厂方法模式


 

 

在工厂方法的基础上又加了Department表,就行成了抽象模式工厂。(多个)

 


3)抽象工厂模式的优缺点

最大的好处便是易于交换产品系列,由于具体工厂类,在一个应用中只需要在初始化的时候出现一次,这就使得改变一个应用的具体工厂变得非常容易.

第二大好处是,它让具体的创建实例过程与客户端分离,客户端通过他们的抽象接口操纵实例,产品的具体类名也被具体工厂的实现分离,不会出现在客户代码中.

缺点:如果增加项目表Project,就需要增加三个类,IprojectSqlserverProjectAcessProject,还需要改IfactorySqlserverFactoryAcessFactory才可以完全实现。要改三个类,这就太糟糕了。等。

                    



你可能感兴趣的:(设计模式)