gpt4 book ai didi

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

转载 作者:qq735679552 更新时间:2022-09-28 22:32:09 27 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章工厂模式_动力节点Java学院整理由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

 简单工厂模式 。

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

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

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
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类图如下:

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

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

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

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

   抽象工厂模式:

  uml类图如下:

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

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

  抽象工厂模式,一个具体工厂可以制造几个产品,例如微软工厂(相当于sqlserverfactory)可以制造微软鼠标(属于鼠标类,鼠标类下面有惠普鼠标,微软鼠标等,相当于上图中的idepartment下面的sqlserverdepartment和accessdepartment),也可以制造微软键盘(属于键盘类,键盘类下面有惠普键盘,微软键盘等,相当于上图中的iuser下面的sqlserveruser和accessuser).

?
1
2
3
4
5
6
7
8
9
工厂方法模式:一个抽象产品类,可以派生出多个具体产品类。
  一个抽象工厂类,可以派生出多个具体工厂类。
  每个具体工厂类只能创建一个具体产品类的实例。
  抽象工厂模式:多个抽象产品类,每个抽象产品类可以派生出多个具体产品类。
  一个抽象工厂类,可以派生出多个具体工厂类。
  每个具体工厂类可以创建多个具体产品类的实例。
 
  区别:工厂方法模式只有一个抽象产品类,而抽象工厂模式有多个。
  工厂方法模式的具体工厂类只能创建一个具体产品类的实例,而抽象工厂模式可以创建多个。

  优点:易于交换产品系列,例如access和sqlserver数据库之间切换.

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

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

  dataaccess的代码如下:

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

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

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

  反射实现:

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

要修改db属性:

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

最后此篇关于工厂模式_动力节点Java学院整理的文章就讲到这里了,如果你想了解更多关于工厂模式_动力节点Java学院整理的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com