- 动机:统一接口
- 角色:
- 工厂角色
- 抽象产品角色
- 具体产品角色
- 结构:
- 优缺点
- 优点:
- 统一了接口:通过引入配置文件,可以在不修改任何客户端代码的情况下更换和增加新的具体产品类,在一定程度上提高了系统的灵活性。
- 分离客户端和服务端:分离耦合
- 缺点:
- 整合了整个创建逻辑,一旦出问题,整个创建都将不能正常工作
- 采用静态工程,无法继承
- 扩展不易:没增加新产品就需要修改工厂逻辑
- 优点:
- 适用点:
- 负责创建的对象不多:工厂逻辑较为清晰
- 负责创建的类别不常变动:不需要经常修改工厂逻辑
- 用例:权限管理、加密处理等(如JDK中dataformat等类)
代码:
/**
*简单工厂模式
*适合解决对象的创建问题
*而工厂中包含了所有的操作,所以该模式不适合经常有改动的项目中!
*/
public
class
Operation {
private
double
numberA
;
private
double
numberB
;
public
double
getNumberA() {
return
numberA
;
}
public
void
setNumberA(
double
numberA) {
this
.
numberA
= numberA;
}
public
double
getNumberB() {
return
numberB
;
}
public
void
setNumberB(
double
numberB) {
this
.
numberB
= numberB;
}
public
double
getResult(){
double
result=0;
return
result;
}
}
public
class
OperationAdd
extends
Operation {
@Override
public
double
getResult() {
double
result=0;
result=getNumberA()+getNumberB();
return
result;
}
}
public
class
OperationDiv
extends
Operation {
@Override
public
double
getResult() {
double
result=0;
result=getNumberA()/getNumberB();
return
result;
}
}
public
class
OperationMul
extends
Operation {
@Override
public
double
getResult(){
double
result=0;
result=getNumberA()*getNumberB();
return
result;
}
}
public
class
OperationSub
extends
Operation {
@Override
public
double
getResult() {
double
result=0;
result=getNumberA()-getNumberB();
return
result;
}
}
public
class
OperationFactory {
private
OperationFactory(){}
public
static
Operation createOperate(
int
operate){
Operation oper=
null
;
switch
(operate){
case
1:
oper=
new
OperationAdd();
break
;
case
2:
oper=
new
OperationSub();
break
;
case
3:
oper=
new
OperationMul();
break
;
case
4:
oper=
new
OperationDiv();
break
;
}
return
oper;
}
}