笔记-大话设计模式-15 抽象工厂模式

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

所有在用简单工厂的地方,都可以考虑用反射技术来去除switch或if,解除分支判断带来的耦合。

Demo:

    interface IUser
    {
        void Insert(User user);
        User GetUser(int id);
    }
    class User
    {
        private int _id;

        public int Id
        {
            get { return _id; }
            set { _id = value; }
        }

        private string _name;

        public string Name
        {
            get { return _name; }
            set { _name = value; }
        }

    }
    class MySqlUser : IUser
    {
        public void Insert(User user)
        {
            Console.WriteLine("MySqlUser的Insert");
        }

        public User GetUser(int id)
        {
            Console.WriteLine("MySqlUser的GetUser");
            return null;
        }
    }
    class SqlServerUser : IUser
    {
        public void Insert(User user)
        {
            Console.WriteLine("SqlserverUser的Insert");
        }

        public User GetUser(int id)
        {
            Console.WriteLine("SqlserverUser的GetUser");
            return null;
        }
    }

Abstract factory type and factory types:

    interface IFactory
    {
        IUser CreateUser();
    }
    class MySqlFactory : IFactory
    {
        public IUser CreateUser()
        {
            return new MySqlUser();
        }
    }
    class SqlServerFactory : IFactory
    {
        public IUser CreateUser()
        {
            return new SqlServerUser();
        }
    }

Test:

            IFactory factory = new MySqlFactory();
            IUser user = factory.CreateUser();
            user.Insert(new User());
            user.GetUser(1);

可以通过反射和配置文件改善抽象工厂模式:

  <appSettings>
    <add key="DB" value="MySql"/>
  </appSettings>
    class DataAccess
    {
        private static readonly string db = ConfigurationManager.AppSettings["DB"];
        private static readonly string assemblyName = "ConsoleApplication1";
        private static readonly string classPrefix = assemblyName + "." + db + "." + db;

        public static IUser CreateUser()
        {
            return (IUser)Assembly.Load(assemblyName).CreateInstance(classPrefix + "User");
            //switch (db)
            //{
            //    case "SqlServer":
            //        //return new SqlserverUser();

            //    case "MySql":
            //        //return new MySqlUser();
            //        return (IUser)Assembly.Load(assemblyName).CreateInstance(classPrefix + "User");
            //    default:
            //        throw new Exception("未实现");
            //}
        }

    }

Test:

            IUser user = DataAccess.CreateUser();
            user.Insert(new User());
            user.GetUser(1);
时间: 2024-11-05 19:03:58

笔记-大话设计模式-15 抽象工厂模式的相关文章

大话设计模式_抽象工厂模式(Java代码)

抽象工厂模式:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们的具体类. 简单描述:有多种抽象产品,并且每种抽象产品都有多个具体产品.一个抽象工厂,提供多个具体工厂,每个工厂则提供不同种类的具体产品. 大话设计模式中的截图: 例子代码: AbstractProductA类: 1 package com.longsheng.abstractfactory; 2 3 public abstract class AbstractProductA { 4 5 public abstract v

&lt;十一&gt;读&lt;&lt;大话设计模式&gt;&gt;之抽象工厂模式

学习设计模式有一段时间了,对设计模式有一个体会,就是没那么难,就是设计程序遵循一些原则,让代码可复用,在修改的时候不用涉及太多的类,扩展方便,抽象工厂模式名字听起来抽象,但理解起来一点也不抽象,用语言可能不好理解,我喜欢通过代码理解,然后成为自己的东西. 抽象工厂模式:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类. <<大话设计模式>>以项目上线时想换另外一个数据库为例子展开的,假如我没原来用的是SqlServer,现在换成access,代码如下: 1.访问数

设计模式(15)-----抽象工厂模式

抽象工厂模式(abstract factory) 定义 提供一个创建一系列相关或相互依赖对象的接口,而无需指定他们具体的类. UML图 例子 在开发的过程难免会遇到更换数据库的事情,也就意味着会出现大量的代码修改.而使用抽象工厂模式,可以很好的避免修改的行为.现在有两个操作对象,一个是用户,一个是部门,都具有插入和查询的功能. POJO package com.csdhsm.pattemdesign.abstractfactory; /** * @Title: User.java * @Desc

大话设计模式:抽象工厂模式

抽象方法模式:提供一个创建一系列相关或互相依赖对象的接口,而无需指定他们具体的类. 三种模式的对比:   简单工厂模式 工厂模式 抽象工厂模式 产品 可以有多个但是都属于同一类, 同一等级.都继承产品抽象类. 可以有多个但是都属于同一类,同一等级. 都继承产品抽象类. 可以有不同种类的产品,每类有多中 具体产品: 抽象产品 只能有一个 只能有一个; 多个抽象产品类:每个抽象产品类可 以派生多种具体产品: 抽象工厂类   只能有一个,可以派生出多个具体工厂类: 只有一个,可派生出多个具体工厂类:

大话设计模式之简单工厂模式&amp;工厂方法模式&amp;抽象工厂模式

创造类模式分为三种:简单工厂模式,工厂模式和抽象工厂模式. 定义: 简单工厂模式:用一个单独的类来做创造实例的过程. 工厂模式:一个用于创建对象的接口,让子类决定实例化哪一个类,讲一个类的实例化 延迟到其子类. 抽象工厂模式:为创建一组相关或相互依赖的对象的类,而不指定具体类. 结构图: 这是简单工厂的结构图,从图中就很好理解. 简单工厂的优点: 根据用户需要,new出需要的对象. 但是简单工厂弊端: 当新加入一个功能是,就要修改工厂.这个时候,就需要工厂模式了. 从图中我们可以看出: 工厂模式

设计模式之抽象工厂模式20170803

创建型设计模式之抽象工厂模式: 一.含义 为创建一组相关或相互依赖的对象提供一个接口,而且无需指定它们的具体类. 具体来说, 为一组具有相同约束(属性)的对象,提供一个接口,这个接口下有不同的实现,每个实现类对应一种类型的约束(一种具体的属性),同时提供该类型的约束(属性)下所有对象的创建方法 二.代码说明 1.主要有两个角色 1)一组互相影响的产品线(对象),也叫做产品族 2)抽象工厂类及其实现类 抽象工厂类:在N个产品族中,在抽象工厂类中就应该有N个创建方法 实现类:具体实现类是产品族的具体

大话设计模式_简单工厂模式(Java代码)

简单的描述:一个父类.多个子类,实例化那个子类由一个单独的工厂类来进行 图片摘自大话设计模式: 运算类: 1 package com.longsheng.simpleFactory; 2 3 public class Calculate { 4 5 private double firstNum; 6 private double secondNum; 7 8 public double getFirstNum() { 9 return firstNum; 10 } 11 12 public v

学习大话设计模式01_简单工厂模式(简易计算器)

1 /** 2 * 面向对象(运算类) 3 * 简易计算器 4 * @author Monica 5 * 6 */ 7 public class Operation { 8 private double numberA = 0; 9 private double numberB = 0; 10 11 //虚函数 12 public double GetResult() { 13 double result = 0; 14 return result; 15 } 16 17 public doub

C#设计模式之三抽象工厂模式(AbstractFactory)【创建型】

原文:C#设计模式之三抽象工厂模式(AbstractFactory)[创建型] 一.引言 写了3篇有关设计模式的文章了,大家有了些反馈,说能从中学到一些东西,我感到很欣慰,那就继续努力.今天我要写第四个模式了,该模式叫抽象工厂.上一篇文章我们讲了[工厂方法]模式,它是为了解决[简单工厂]模式所面对的问题,它的问题就是:如果我们增加新的产品,工厂类的方法就要修改本身的代码,增加产品越多,其逻辑越复杂,同时这样的修改也是不符合[开放关闭原则OCP],对修改代码关闭,对增加代码开放.为了解决[简单工厂