当前位置: 首页 > news >正文

自学编程做点网站赚钱大连甘井子区区号

自学编程做点网站赚钱,大连甘井子区区号,推广哪个app最挣钱,网站建设中一览二栏什么意思与上篇介绍的Factory Method工厂方法模式一样#xff0c;Abstract Factory 抽象工厂模式也属于典型的“对象创建模式”模式#xff0c;解决的问题也极其相似#xff0c;在理解了Factory Method工厂方法模式的基础上再去理解Abstract Factory 抽象工厂模式就会变得更加容易。…与上篇介绍的Factory Method工厂方法模式一样Abstract Factory 抽象工厂模式也属于典型的“对象创建模式”模式解决的问题也极其相似在理解了Factory Method工厂方法模式的基础上再去理解Abstract Factory 抽象工厂模式就会变得更加容易。 文章目录 1. 动机Motivation2. 代码演示Factory Method工厂方法模式2.1 常规方法2.2 Factory Method工厂方法2.3 Abstract Factory 抽象工厂模式 3. 模式定义4. 结构Structure5. 要点总结6. 其他参考 1. 动机Motivation 在软件系统中经常面临着“一系列相互依赖的对象”的创建工作同时由于需求的变化往往存在更多系列对象的创建工作。如何应对这种变化如何绕过常规的对象创建方法(new)提供一种“封装机制”来避免客户程序和这种“多系列具体对象创建工作”的紧耦合 2. 代码演示Factory Method工厂方法模式 结合代码分析什么是“一系列相互依赖的对象” 2.1 常规方法 假如有一个任务需要写一个访问的是SQL Server的数据访问层在数据访问层需要创建一系列对象需要创建数据库的链接SqlConnection* connection创建数据库的命令对象SqlCommand* command创建数据库的DataReader对象SqlDataReader* reader这些都是跟SQL Server相关的。 class EmployeeDAO{public:vectorEmployeeDO GetEmployees(){SqlConnection* connection new SqlConnection();connection-ConnectionString ...;SqlCommand* command new SqlCommand();command-CommandText...;command-SetConnection(connection);SqlDataReader* reader command-ExecuteReader();while (reader-Read()){}} };但是当客户的数据库发生变化变为Oracle、MySQL、DB2等对应的类型就需要变化一旦使用new就会绑死在SQL Server上这个类就不适用于多种数据库的变化假设需要支持多种数据库大家第一个反应就是需要做到面向接口的编程。 2.2 Factory Method工厂方法 在上面代码的基础进行修改结合上篇介绍的引入Factory Method工厂方法来代替new就得到使用Factory Method工厂方法模式解决问题的代码。 //数据库访问有关的基类接口 class IDBConnection{}; class IDBConnectionFactory{ public:virtual IDBConnection* CreateDBConnection()0; };class IDBCommand{}; class IDBCommandFactory{ public:virtual IDBCommand* CreateDBCommand()0; };class IDataReader{}; class IDataReaderFactory{ public:virtual IDataReader* CreateDataReader()0; };//支持SQL Server class SqlConnection: public IDBConnection{}; class SqlConnectionFactory:public IDBConnectionFactory{};class SqlCommand: public IDBCommand{}; class SqlCommandFactory:public IDBCommandFactory{};class SqlDataReader: public IDataReader{}; class SqlDataReaderFactory:public IDataReaderFactory{};//支持Oracle class OracleConnection: public IDBConnection{};class OracleCommand: public IDBCommand{};class OracleDataReader: public IDataReader{};class EmployeeDAO{IDBConnectionFactory* dbConnectionFactory;IDBCommandFactory* dbCommandFactory;IDataReaderFactory* dataReaderFactory;public:vectorEmployeeDO GetEmployees(){IDBConnection* connection dbConnectionFactory-CreateDBConnection();connection-ConnectionString(...);IDBCommand* command dbCommandFactory-CreateDBCommand();command-CommandText(...);command-SetConnection(connection); //关联性命令和链接时相关的对象IDBDataReader* reader command-ExecuteReader(); //关联性while (reader-Read()){}} };上面的实现方法也已经解决了问题但是暴露了什么问题 IDBConnectionFactory* dbConnectionFactory;中假如传入的是SqlConnectionFactory但是IDBCommandFactory* dbCommandFactory;中是否可以传入OracleCommandFactory显然是不可以的。这三个对象必须是同系列同组的他们之间存在关联性command和connection等之间是存在关联的。 这里就带来紊乱性假如未来传入了不同的factory给你出现传入SqlConnectionFactory、OracleCommandFactory、MySQLDataReaderFactory那就乱套了无法搭配到一起这就引出了Abstract Factory 抽象工厂模式。 2.3 Abstract Factory 抽象工厂模式 //数据库访问有关的基类 class IDBConnection{};class IDBCommand{};class IDataReader{};class IDBFactory{ public:virtual IDBConnection* CreateDBConnection()0;virtual IDBCommand* CreateDBCommand()0;virtual IDataReader* CreateDataReader()0;};//支持SQL Server class SqlConnection: public IDBConnection{}; class SqlCommand: public IDBCommand{}; class SqlDataReader: public IDataReader{};class SqlDBFactory:public IDBFactory{ public:virtual IDBConnection* CreateDBConnection()0;virtual IDBCommand* CreateDBCommand()0;virtual IDataReader* CreateDataReader()0;};//支持Oracle class OracleConnection: public IDBConnection{};class OracleCommand: public IDBCommand{};class OracleDataReader: public IDataReader{};class EmployeeDAO{IDBFactory* dbFactory;public:vectorEmployeeDO GetEmployees(){IDBConnection* connection dbFactory-CreateDBConnection();connection-ConnectionString(...);IDBCommand* command dbFactory-CreateDBCommand();command-CommandText(...);command-SetConnection(connection); //关联性IDBDataReader* reader command-ExecuteReader(); //关联性while (reader-Read()){}} };因为这3个factory特别有相关性那用1个factory就可以了将这3个类放在一起实现高内聚松耦合。 大家看到这里就发现使用一个工厂这就保证了关联性解决了上面提到问题。从上面的代码可以看出Abstract Factory 其实被称为Family Factory更为合适但是GOF/gaofour/4位大师已经定义了这样的名字我们就不去计较这个名字了。 3. 模式定义 提供一个接口让该接口负责创建一系列“相关或者相互依赖的对象”无需指定它们具体的类。 ​ ——《设计模式》GoF “提供一个接口”的接口就是IDBFactory创建了IDBConnection、IDBCommand、IDataReader等 4. 结构Structure 上图是《设计模式》GoF中定义的Abstract Factory 抽象工厂模式的设计结构。结合上面的代码看图中最重要的是看其中稳定和变化部分也就是下图中红框、蓝框和绿框框选的部分。 5. 要点总结 如果没有应对“多系列对象构建”的需求变化则没有必要使用Abstract Factory模式这时候使用简单的工厂完全可以。“系列对象”指的是在某一特定系列下的对象之间有相互依赖、或作用的关系。不同系列的对象之间不能相互依赖。Abstract Factory模式主要在于应对“新系列”的需求变动。其缺点在于难以应对“新对象”的需求变动。 第三点的意思是可以增加SQL、Oracle等系列但是类内增加新对象就不可以了因为SqlDBFactory是一个抽象基类抽象基类要求稳定这就是该模式的缺点模式中稳定的部分就是缺点。 当所有地方都变化就没有模式可以解决当所有地方都稳定 Abstract Factory 抽象工厂模式其实跟Factory Method工厂方法模式很接近也可以说Factory Method工厂方法模式是Abstract Factory 抽象工厂模式的特例。 当以下代码创建三个对象 class IDBFactory{ public:virtual IDBConnection* CreateDBConnection()0;virtual IDBCommand* CreateDBCommand()0;virtual IDataReader* CreateDataReader()0;};变为创建一个对象就是Factory Method工厂方法模式 class IDBFactory{ public:virtual IDBConnection* CreateDBConnection()0;};有些地方直接将Abstract Factory 抽象工厂模式和Factory Method工厂方法模式直接称作工厂模式。 6. 其他参考 C设计模式——抽象工厂模式
http://www.yutouwan.com/news/319269/

相关文章:

  • 网站建设教程 金旭亮网站建设项目招标文件
  • 支付通道网站怎么做傻瓜使用模板建网站
  • 吗网站建设新开传奇网站999新服网
  • 企业网站的作用有哪些网上投资项目的平台有哪些
  • 做网站42类商标怎么选小类wordpress文件夹里图片无法获取
  • 英文网站的首页怎么做长沙专业网站建设团队
  • 端网站建设关于优化培训
  • 七牛搭建网站网站布局结构有哪些
  • 开发网站有什么用网站建设 免费视频
  • 幕墙装饰工程网站模板wordpress如何打开数据库
  • 鞋厂网站模板wordpress七牛缩略图
  • 网站如何做分站系统重庆seo什么意思
  • 余姚外贸网站建设数字经济团体赛
  • asp.net网站项目建设微信公众号怎么分享wordpress
  • 北京网站建设公司如何排版山东省和住房建设厅网站首页
  • 苏州模板网站建站ie浏览器网页版
  • seo白帽优化网站优化升级
  • 网站建设衤首选金手指10深圳网站建设黄浦网络-技术差
  • 海纳企业网站管理系统网上备案查询
  • 雄安做网站的公司仿租号网站源码网站开发
  • 外链购买交易平台网站诊断seo当前数据是指
  • 福州网站制作费用广东省建设厅官方网站
  • 浙江省住建厅网站装修公司网站设计规划
  • 国内网站 备案富民网站建设
  • seo查询站长高清免费素材网
  • 做视频网站需要流量适合在线做笔试的网站
  • 查互做蛋白的网站wordpress 乐趣公园
  • 做网店有哪些拿货网站正版win10做win7系统下载网站
  • 个人建网站怎么赚钱网站导航优化的描述
  • 做的asp网站手机号码找个人合伙做网站