全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

工厂模式_动力节点Java学院整理

 简单工厂模式

  

  当需要加法类的时候,调用工厂类的CreateOperate(),要指定制造的Product

  例如在大话设计模式P11给的运算工厂例子:

public static Operation createOperate(string operate)
{
Operation oper = null;
12
switch (operate)
{
case "+":
{
oper = new OperationAdd();
break;
}
case "-":
{
oper = new OperationSub();
break;
}
case "*":
{
oper = new OperationMul();
break;
}
case "/":
{
oper = new OperationDiv();
break;
}
}
return oper;
}
}

  调用工厂,需要createOperator("/"),就能返回除法运算符。

  优点:客户端不需要修改代码。

  缺点: 当需要增加新的运算类的时候,不仅需新加运算类,还要修改工厂类,违反了开闭原则。 

  工厂方法模式

  UML类图如下:

  

  这个和简单工厂有区别,简单工厂模式只有一个工厂,工厂方法模式对每一个产品都有相应的工厂

  好处:增加一个运算类(例如N次方类),只需要增加运算类和相对应的工厂,两个类,不需要修改工厂类。

  缺点:增加运算类,会修改客户端代码,工厂方法只是把简单工厂的内部逻辑判断移到了客户端进行。

   抽象工厂模式:

  UML类图如下:

  

  从图上可以看出这和工厂方法模式很相似,但是呢,有几个区别:

  抽象工厂模式,一个具体工厂可以制造几个产品,例如微软工厂(相当于SqlserverFactory)可以制造微软鼠标(属于鼠标类,鼠标类下面有惠普鼠标,微软鼠标等,相当于上图中的IDepartment下面的SqlserverDepartment和AccessDepartment),也可以制造微软键盘(属于键盘类,键盘类下面有惠普键盘,微软键盘等,相当于上图中的IUser下面的SqlserverUser和AccessUser)。

工厂方法模式:一个抽象产品类,可以派生出多个具体产品类。 
  一个抽象工厂类,可以派生出多个具体工厂类。 
  每个具体工厂类只能创建一个具体产品类的实例。 
  抽象工厂模式:多个抽象产品类,每个抽象产品类可以派生出多个具体产品类。 
  一个抽象工厂类,可以派生出多个具体工厂类。 
  每个具体工厂类可以创建多个具体产品类的实例。 

  区别:工厂方法模式只有一个抽象产品类,而抽象工厂模式有多个。
  工厂方法模式的具体工厂类只能创建一个具体产品类的实例,而抽象工厂模式可以创建多个。

  优点:易于交换产品系列,例如Access和SQLServer数据库之间切换。

  缺点:例如增加一个机箱产品,不仅需要添加三个类“机箱类,微软机箱,惠普机箱”,还要修改惠普工厂,微软工厂支持制造机箱。而添加一个联想工厂的时候,只需要添加三个类,使用联想工厂还是要修改客户端代码的。

  

  DataAccess的代码如下:

  

   这样,在DataAccess里面直接指定数据库(指定品牌),当需要换数据库(or 品牌)的时候,修改DataAccess内的代码。

   当然可以用反射方法修改数据库,这样,只需要修改配置文件。就完美的改善了抽象工厂的缺点,而且在客户端不用修改代码。

  反射实现:

  

要修改db属性:


# 工厂模式_动力节点Java学院整理  # 简单工厂模式_动力节点Java学院整理  # Java中的抽象工厂模式_动力节点Java学院整理  # java 单例模式和工厂模式实例详解  # JAVA简单工厂模式(从现实生活角度理解代码原理)  # java设计模式之简单工厂模式  # java设计模式之简单工厂模式简述  # 深入理解java三种工厂模式  # java 工厂模式的实例详解  # 多个  # 微软  # 鼠标  # 惠普  # 客户端  # 只需要  # 不需要  # 只有一个  # 创建一个  # 图中  # 几个  # 都有  # 就能  # 可以用  # 有几个  # 可以看出  # 移到  # 这和  # 仅需  # 配置文件 


相关文章: 南京网站制作费用,南京远驱官方网站?  网站制作说明怎么写,简述网页设计的流程并说明原因?  如何通过西部数码建站助手快速创建专业网站?  如何通过PHP快速构建高效问答网站功能?  Thinkphp 中 distinct 的用法解析  开封网站制作公司,网络用语开封是什么意思?  nginx修改上传文件大小限制的方法  c# 在高并发下使用反射发射(Reflection.Emit)的性能  哈尔滨网站建设策划,哈尔滨电工证查询网站?  活动邀请函制作网站有哪些,活动邀请函文案?  建站之星如何防范黑客攻击与数据泄露?  香港服务器租用费用高吗?如何避免常见误区?  微信推文制作网站有哪些,怎么做微信推文,急?  建站之星后台搭建步骤解析:模板选择与产品管理实操指南  学校建站服务器如何选型才能满足性能需求?  如何通过wdcp面板快速创建网站?  如何快速搭建个人网站并优化SEO?  如何选择美橙互联多站合一建站方案?  如何在服务器上三步完成建站并提升流量?  大同网页,大同瑞慈医院官网?  招贴海报怎么做,什么是海报招贴?  C++中引用和指针有什么区别?(代码说明)  网站制作大概要多少钱一个,做一个平台网站大概多少钱?  如何在宝塔面板中修改默认建站目录?  如何高效搭建专业期货交易平台网站?  浅谈Javascript中的Label语句  公司门户网站制作流程,华为官网怎么做?  建站之星官网登录失败?如何快速解决?  网站制作怎么样才能赚钱,用自己的电脑做服务器架设网站有什么利弊,能赚钱吗?  无锡营销型网站制作公司,无锡网选车牌流程?  建站之星图片链接生成指南:自助建站与智能设计教程  如何快速生成高效建站系统源代码?  韩国服务器如何优化跨境访问实现高效连接?  如何快速搭建自助建站会员专属系统?  长沙做网站要多少钱,长沙国安网络怎么样?  网站制作外包价格怎么算,招聘网站上写的“外包”是什么意思?  网站图片在线制作软件,怎么在图片上做链接?  用v-html解决Vue.js渲染中html标签不被解析的问题  ,购物网站怎么盈利呢?  模具网站制作流程,如何找模具客户?  保定网站制作方案定制,保定招聘的渠道有哪些?找工作的人一般都去哪里看招聘信息?  太原网站制作公司有哪些,网约车营运证查询官网?  建站之星客服服务时间及联系方式如何?  电视网站制作tvbox接口,云海电视怎样自定义添加电视源?  建站之星安装失败:服务器环境不兼容?  专业网站制作服务公司,有哪些网站可以免费发布招聘信息?  如何优化Golang Web性能_Golang HTTP服务器性能提升方法  如何选择高性价比服务器搭建个人网站?  定制建站是什么?如何实现个性化需求?  网站制作话术技巧,网站推广做的好怎么话术? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。