抽象工厂模式与工厂方法模式有哪些不同_工厂方法和抽象工厂

抽象工厂模式与工厂方法模式有哪些不同_工厂方法和抽象工厂Abstract Factory动机实例模式定义结构要点总结笔记动机在软件系统中,经常面临着”一系列相互依赖的对象“的创建工作;同时,由于需求的变化,往往存在更多系列对象的创建工作如果应对这种变换?如何绕过常规的对象创建方法(new),提供一种”封装机制“来避免客户程序和这种”多系列具体对象创建工作“的紧耦合?实例数据库连接的时候会有很多关联的对象,这些对象是一个整体朴素class EmployeeDAO{public: vector<EmployeeDAO> GetEm

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

动机

在软件系统中,经常面临着”一系列相互依赖的对象“的创建工作;同时,由于需求的变化,往往存在更多系列对象的创建工作

如果应对这种变换?如何绕过常规的对象创建方法(new),提供一种”封装机制“来避免客户程序和这种”多系列具体对象创建工作“的紧耦合?

实例

数据库连接的时候会有很多关联的对象,这些对象是一个整体

朴素

class EmployeeDAO{ 
   
public:
    vector<EmployeeDAO> GetEmployees(){ 
   
        SqlConnection &connection = new SqlConnection();
        connection->ConnectionString = "...";

        SqlCommand *command = new SqlCommand();
        command->CommandText = "...";
        SqlDataReader* reader = command = command->ExecuteReader();
        while(reader->Read()){ 
   
            
        }
    }
}

抽象工厂 Abstract Factory

//数据库访问有关的基类
class IDBConnection{ 
   

};
class IDBommand{ 
   

};
class IDataReader{ 
   

}
class IDBFactory{ 
   
public :
    virtual IDBConnection *CreateDBConnection() = 0;
    virtual IDBommand *CreateDBCommand() = 0;
    virtual IDataReader *CreateDataReader() = 0;
}

//支持SQL Server
class SqlConnection : public IDBConnection{ 
   

}
class SqlCommand : public IDBCommand{ 
   

}
class SqlDataReader : public IDataReader{ 
   

}
//sql工厂
class SqlFactory: public IDBFactory{ 
   
    virtual IDBConnection *CreateDBConnection()...;
    virtual IDBommand *CreateDBCommand()...;
    virtual IDataReader *CreateDataReader()...;
}
//支持Oracle
class OracleConnection : public IDBConnection{ 
   

}
class OracleCommand : public IDBCommand{ 
   

}
class OracleDataReader : public IDataReader{ 
   

}
//Oracle工厂
class SqlFactory: public IDBFactory{ 
   
    virtual IDBConnection *CreateDBConnection()...;
    virtual IDBommand *CreateDBCommand()...;
    virtual IDataReader *CreateDataReader()...;
}

class EmployeeDAO{ 
   
private:
    IDBFactory * factory;
public:
    vector<EmployeeDAO> GetEmployees(){ 
   
        IDBConnection &connection = new CreateDBConnection();
        factory->ConnectionString = "...";

        factory *command = new CreateDBCommand();
        command->CommandText = "...";
        command->SetConnection(connection); //关联性


        IDataReader* reader = command->ExecuteReader();//关联性
        while(reader->Read()){ 
   
            
        }
    }
}

模式定义

提供一个接口,让该接口负责创建一系列”相关或者相互依赖的独享“,无需指定他们具体的类。

结构

在这里插入图片描述

要点总结

  • 如果没有应对”多系列对象构建“的需求变换,则没有必要使用Abstract Factory模式 这时候使用简单的工厂完全可以、
  • 系列对象“指的是在某一特定系列下的对象之间有相互依赖或作用的关系。不同系列的对象之间不能相互依赖
  • Abstract Factory 模式主要在于应对”新系列“的需求变动。其缺点在于难以应对”新对象“的需求变动

笔记

  • 抽象工厂就是在工厂模式的基础上创建多个对象
  • 抽象工厂就是创建很多个对象 对象之间是一组一组的关系 不能这个对象用这个组里的 那个对象又用另外一个组里的
  • 设计模式是解决稳定中有变换 既有稳定也有不稳定
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/168510.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 数组和链表的区别?「建议收藏」

    数组和链表的区别?「建议收藏」今天来说下两种最基本的数据结构——数组和链表,它们无处不在!下面我们来一一介绍下他们,首先了解下内存分配的!内存的工作原理假设你去看演出,需要将东西寄存。寄存处有一个柜子,柜子有很多抽屉。每个抽屉可放一样东西,你有两样东西要寄存,因此要了两个抽屉。现在你可以去看演出了!这大致就是计算机内存的工作原理。计算机就像是很多抽屉的集合体,每个抽屉都有地址。fe0ffeeb是一个内存单元的地址。需要将数据存储到内存时,你请求计算机提供存储空间,计算机给你一个存储地址。需要存储多项数据时,有两种基本方式

    2022年6月28日
    25
  • 1024,节日快乐!

    1024,节日快乐!每个你不了解的新世界,都值得说一声“Hello,World!”,1024,祝大家节日快乐!少熬夜,多赚钱,护好发!

    2022年6月11日
    38
  • centos7 top命令_top命令查看cpu使用率超过100%

    centos7 top命令_top命令查看cpu使用率超过100%top命令Linuxtop命令用于实时显示process的动态。top参数详解第一行,任务队列信息**系统当前时间:**13:52:56**系统开机后到现在的总运行时间:**up66

    2022年7月31日
    8
  • 求矩阵的逆的三种方法

    求矩阵的逆的三种方法我们知道求矩阵的逆具有非常重要的意义,本文分享给大家如何针对3阶以内的方阵,求出逆矩阵的3种手算方法:待定系数法、伴随矩阵法、初等变换法(只介绍初等行变换)待定系数法求逆矩阵 1 首先,我们来看如何使用待定系数法,求矩阵的逆。 举例: 矩阵A= 12 -1-3 2 假设所求的逆矩阵为 ab cd 则 3 从而可以得出方程组 a+2c=1 b+2d=0 -a-3c=0 -b-3d=1

    2022年8月21日
    7
  • android开机动画 制作工具,android开机动画制作

    android开机动画 制作工具,android开机动画制作本帖最后由nihao200823于2017-1-1220:38编辑android开机动画制作与播放原理简介谁都想拥有一个华丽漂亮的开机动画,这让人心情舒畅,android是怎么来实现的?怎么制作一个自己的开机动画?这里揭开android开机动画的神秘面纱。1、制作开关机动画1.1开机动画的位置system/media/bootanimation.zip,要修改开机动画就是修改boota…

    2022年5月14日
    46
  • ContextLoaderListener类和contextConfigLocation参数[通俗易懂]

    ContextLoaderListener类和contextConfigLocation参数[通俗易懂]一、web.xml中经常有如下配置 &amp;lt;listener&amp;gt;&amp;lt;listener-class&amp;gt;org.springframework.web.context.ContextLoaderListener&amp;lt;/listener-class&amp;gt; &amp;lt;/listener&amp;gt;&amp;lt;context-param

    2022年6月26日
    29

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号