`
pcajax
  • 浏览: 2200868 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

设计模式你怎么看?--抽象工厂模式

 
阅读更多

一  前言

  在设计模式中有简单工厂,工厂方法,抽象工厂,这三种工厂方法,各自有各自的特点,但有都有共同的特点 工厂(Factory)都是围绕着工厂类转,这篇只写 "抽象工厂"相关的内容 上一篇的地址在这里

设计模式你怎么看?--简单工厂模式

 

二 抽象工厂介绍

 2.1 什么是抽象工厂模式 

  抽象工厂模式是所有形态的工厂模式中最为抽象和最具一般性的一种形态。抽象工厂模式是指当有多个抽象角色时,使用的一种工厂模式。抽象工厂模式可以向客户端提供一个接口,使客户端在不必指定产品的具体的情况下,创建多个产品族中的产品对象(来自百科)

 

2.2 抽象工厂模式优缺点

  优点:易于更改产品类型 如 可以很方便的更改SqlFactory 与OracleFactory,另外使得客户端于业务层分离,客户端所接触的都是IProductA 和IFactory

     缺点:当新增一种产品类型时改动会较大,例如当需要增加ProductB时需要增加IProductB SqlProductB OracleProductB,还要修改IFactory,SqlFactory,OracleFactory。

 

2.3 抽象工厂模式UML类图

     业务情景如下:在某个系统中未来可能会更换数据库类型如SQLServer,Access ,Oracle 等。要求修改与维护的成本要低。在这种情况下用抽象工厂解决这种问题是很好的因为不同数据库对CRUD操作是语法不完全相同,因此比较好的方法是定义一个抽象类或接口然后让不同的子类去实现自己的变化,再通过各自的工厂方法将实例提供到客户端 

下图正是这么一个过程每个Product都有自己的接口与工厂,在调用时Client调用SqlFactory然后返回SqlProductA的实例到Client中

  

 

三 抽象工厂代码 

  定义工厂的接口规范所有不同类型的工厂类

    //工厂接口
   public interface IFactory
    {
        IProductA CreateInstance();
    }

 

具体类型的工厂类 用于创建对应类型的产品实例

复制代码
  //Sql类型的工厂类 
   class SqlFactory : IFactory
    {
        public IProductA CreatProductA()
        {
            return new SqlProductA();
        }
    }
复制代码

同上

复制代码
    //Oracle类型的工厂类
    class OracleFactory:IFactory
    {
        public  IProductA CreatProductA()
        {
            return new OracleProductA();
        }
    }
复制代码

 

定义具体产品的共有特性

复制代码
    //定义ProductA所共有的方法
    public interface  IProductA
    {
        void CreatProductA();

        void DeleteProductA();
    }
复制代码

 

具体产品特性的实现

复制代码
    //实现IProductA定义的共有方法
    class SqlProductA:IProductA
    {
        public void CreatProductA()
        {
            Console.Write("新增SQLServer下的ProductA");
        }
        public void DeleteProductA()
        {
            Console.Write("删除一个SQLServer下的ProductA");
        }
    }
复制代码

 

 

复制代码
    //实现ProductA共有方法
    class OracleProductA:IProductA
    {
        public void CreatProductA()
        {
            Console.Write("新增Oracle下的ProductA");
        }
        public void DeleteProductA()
        {
            Console.Write("删除一个Oracle下的ProductA");
        }
    }
复制代码

 

 

客户端调用 

复制代码
            //SQL类型
            IFactory sqlFactory = new SqlFactory();
            IProductA sql = sqlFactory.CreatProductA();
            sql.CreatProductA();
            sql.DeleteProductA();

            //Oracle类型
            IFactory oracleFactory = new OracleFactory();
            IProductA oracle = oracleFactory.CreatProductA();
            oracle.CreatProductA();
            oracle.DeleteProductA();
复制代码

结果如下

 

 

 四 总结

  设计模式的根本目的是让程序之间的耦合降低,提高程序的健壮性,任何业务的与代码的变化都是要付出代价的。学会把设计模式应用到实际项目中,可以适当的降低这种代价,但任何事都是具有两面性的,减少耦合代码量肯定是要增加的。尝试找到平衡点设计模式就是才是真正用好了。

本人水平有限,如有不对之处还请指出 谢谢~

 

分享到:
评论

相关推荐

    设计模式专题之(三)抽象工厂模式---设计模式抽象工厂模式示例代码(python--c++)

    设计模式专题之(三)抽象工厂模式---设计模式抽象工厂模式示例代码(python--c++)

    java设计模式----抽象工厂模式

    java设计模式----抽象工厂模式,简单工厂模式代码 代码内部

    创建型设计模式----抽象工厂模式

    抽象工厂模式是创建型设计模式的一种,它提供了一种创建对象族(一组具有相互依赖关系的对象)的方法,而无需指定具体类。这种模式的核心在于它允许客户端代码与具体实现细节解耦,使得更换一个产品族变得更为容易。...

    设计模式----抽象工厂模式

    抽象工厂模式是设计模式中的一种创建型模式,它提供了一种创建对象族的接口,而无需指定具体的类。这种模式允许客户端使用一个通用接口来创建一组相关或相互依赖的对象,而无需了解它们的具体实现。在Java或其他面向...

    设计模式---抽象工厂模式(Abstract Factory)-UML图 (StarUML)

    设计模式---抽象工厂模式(Abstract Factory)-UML图 (StarUML)

    设计模式--抽象工厂模式实现多数据库连接

    抽象工厂模式是设计模式中的一种创建型模式,它提供了一个创建对象族的接口,而无需指定它们的具体类。在.NET开发中,这种模式常用于实现多数据库连接,比如连接到MySQL、SQL Server或Oracle等不同的数据库系统。...

    简单工厂模式-工厂方法模式-抽象工厂模式

    在软件设计模式中,工厂模式是一组非常基础且实用的设计模式,主要分为简单工厂模式、工厂方法模式和抽象工厂模式。这些模式都是为了解决对象创建的问题,通过封装对象的创建过程,使得代码更加灵活,易于扩展和维护...

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

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

    设计模式-抽象工厂模式

    抽象工厂模式是设计模式中的一种创建型模式,它提供了一种创建对象族的接口,而无需指定其具体的类。这种模式的关键在于“族”,即一系列相关的对象。在抽象工厂模式中,我们创建一个抽象工厂接口,然后为每一种具体...

    设计模式-抽象工厂模式(讲解及其实现代码)

    抽象工厂模式是设计模式中的一种创建型模式,它提供了一种创建对象集合的接口,而无需指定具体的类。这种模式允许系统独立于如何创建、组合和表示产品对象的细节进行设计,为产品族(一组相关或相互依赖的对象)提供...

    设计模式之-抽象工厂-AbstractFactory

    抽象工厂模式可以帮助我们创建一个工厂接口,该接口声明了创建这些组件的方法,然后为每种操作系统实现一个具体的工厂类。 ```java // 抽象工厂接口 public interface GUIFactory { Button createButton(); ...

    设计模式 - 抽象工厂模式

    设计模式 - 抽象工厂模式 抽象工厂模式是一种创建型设计模式,它提供了一种方式来创建一组相关或相互依赖的对象,而不需要指定具体的类。该模式允许客户端使用抽象的接口来创建一组相关的产品,而不需要关系实际...

    设计模式抽象工厂实验报告

    实验的核心在于理解和实践**抽象工厂模式**,这是一种常用的面向对象设计模式,旨在解决软件设计中的灵活性和扩展性问题。实验的目标包括: 1. **深入理解抽象工厂模式的基本概念和原理**:通过理论学习和实际操作...

    抽象工厂-设计模式

    抽象工厂-设计模式-主要介绍怎么样创建抽象工厂并实现数据库创建

    3.java设计模式-创建者模式-抽象工厂模式.pdf

    抽象工厂模式是创建型设计模式中的一种,用于创建一系列相关或相互依赖的对象,而无需指定其具体类。抽象工厂模式强调产品的系列,对于有多个产品等级结构的系统非常有用。在抽象工厂模式中,一个工厂负责创建多个...

    设计模式UML图--工厂模式

    - UML图表示:抽象工厂模式的UML图通常包含一个抽象工厂接口,多个实现该接口的具体工厂类,以及多个相关的抽象产品类和具体产品类。工厂接口定义了创建一组相关产品的方法,具体工厂类实现这些方法,产品类则按照...

    java设计模式-抽象工厂模式

    抽象工厂模式是设计模式中的一种,它属于创建型模式,主要解决的是当系统有多个产品族,而每个产品族又有多个具体产品时,如何组织代码的问题。在Java中,抽象工厂模式提供了一种创建对象组的方式,使得这些对象属于...

    设计模式-抽象工厂-Java 源码

    抽象工厂模式是设计模式中的一种创建型模式,它提供了一个创建对象族的接口,而具体的对象族由子类决定。这种模式允许系统在不指定具体产品的前提下,能够创建一系列相关或相互依赖的对象,同时避免了硬编码所造成的...

    设计模式-抽象工厂模式javademo

    抽象工厂模式是软件设计模式中的一种创建型模式,它提供了一种创建对象族(一组具有相互依赖关系的对象)的方法,而无需指定它们的具体类。在Java编程中,抽象工厂模式通常用于实现跨平台或者跨框架的接口,使得系统...

    工厂模式:简单工厂模式、工厂方法模式、抽象工厂模式

    在给定的资源中,"设计模式交流之工厂模式-shannonxu-2014-10-24.pptx"可能是详细的PPT讲解,涵盖了这些模式的概念、结构、优缺点以及实际应用案例。而"Factory"可能是一个代码示例,展示了工厂模式的具体实现,包括...

Global site tag (gtag.js) - Google Analytics