增加实例化的对象,这些都是容易变化的地方,所以适合用一个工厂来做决策。
内容才是工厂模式的原理,但是c的实现,需要a和b已经实现的情况下才可以使用。
功能时:
内容即可,其它类不会涉及任何更改;
增加某个可以通过工厂来实例化的业务,则需要做两处修改:
功能。
增加实例化这个类的代码。
包括的7个类:
代码
获取操作结果的虚方法。
/**
- @Author: cxh
- @CreateTime: 17/12/31 17:53
- @ProjectName: JavaBaseTest
*/
public class Client {
//客户端代码
public static void main(String[] args) {
//定义一种操作
Operation ope=OperationFactory.createOperation("+");
//定义两个操作数
ope.setFirst(11);
ope.setSecond(22);
//输出计算结果
System.out.println(ope.getResult());
}
}
(2)Operation
/**
-
@Author: cxh
-
@CreateTime: 17/12/31 17:51
-
@ProjectName: JavaBaseTest
*/
public class Operation {
private int first;
private int second;
//get and set
public int getFirst() {
return first;
}
public void setFirst(int first) {
this.first = first;
}
public int getSecond() {
return second;
}
public void setSecond(int second) {
this.second = second;
}
//求运算结果
public int getResult(){
return 0;
}
}
/**
-
@Author: cxh
-
@CreateTime: 17/12/31 17:57
-
@ProjectName: JavaBaseTest
*/
public class OperationAdd extends Operation {
@Override
public int getResult(){
return super.getFirst()+super.getSecond();
}
@Override
public void setFirst(int first) {
super.setFirst(first);
}
@Override
public void setSecond(int second) {
super.setSecond(second);
}
}
/**
-
@Author: cxh
-
@CreateTime: 17/12/31 18:04
-
@ProjectName: JavaBaseTest
*/
public class OperationSubs extends Operation {
@Override
public int getResult() {
return super.getFirst()-super.getSecond();
}
@Override
public void setFirst(int first) {
super.setFirst(first);
}
@Override
public void setSecond(int second) {
super.setSecond(second);
}
}
/**
-
@Author: cxh
-
@CreateTime: 17/12/31 18:16
-
@ProjectName: JavaBaseTest
*/
public class OperationMul extends Operation {
@Override
public int getResult() {
return super.getFirst()*super.getSecond();
}
@Override
public void setFirst(int first) {
super.setFirst(first);
}
@Override
public void setSecond(int second) {
super.setSecond(second);
}
}
/**
-
@Author: cxh
-
@CreateTime: 17/12/31 18:28
-
@ProjectName: JavaBaseTest
*/
public class OperationDevide extends Operation {
@Override
public int getResult() {
try{
return super.getFirst()/super.getSecond();
}catch (Exception e){
System.out.println("错误信息列表:"+e);
return -1;
}
}
@Override
public void setFirst(int first) {
super.setFirst(first);
}
@Override
public void setSecond(int second) {
super.setSecond(second);
}
}
/**
- @Author: cxh
- @CreateTime: 17/12/31 17:50
- @ProjectName: JavaBaseTest
/
public class OperationFactory {
public static Operation createOperation(String s){
switch (s){
case "+":
return new OperationAdd();
case "-":
return new OperationSubs();
case "":
return new OperationMul();
case "/":
return new OperationDevide();
}
return null;
}
}
输出结果:33