工厂适用于生产,生产出不同的对象,这些对象都有着相同的特性,又有着各自独特的地方。
基本结构如下:
①、超类,或许可设计成抽象的abstract
一些公用的属性(被子类调用)
一些公用的方法(被子类覆写)
②、子类,个数较多,继承超类
得到超类公用方法,覆写
③、工厂
工厂用于构建,以多态的方式,通过条件判断得到子类(生产方法多为静态static)
④、调用者
传入关键性判断参数调用工厂
以超类的名义生产子类(多态)
给超类的公用属性赋值
以超类的名义调用被覆写公用方法,达到预期的效果
示例代码:模拟简单的加减运算
①、超类#########################################
/**
* 超类,封装数据
*/
public abstract class Operation {
private double num1; //公用属性1
private double num2; //公用属性2
public abstract void getResult(); //公用方法
public double getNum1() {
return num1;
}
public void setNum1(double num1) {
this.num1 = num1;
}
public double getNum2() {
return num2;
}
public void setNum2(double num2) {
this.num2 = num2;
}
}
②、子类#########################################
/**
* 子类1
*/
public class AddClass extends Operation{
@Override
public void getResult() {
// TODO Auto-generated method stub
System.out.println("运算结果为:"+(this.getNum1()+this.getNum2()));
}
}
/**
* 子类2
*/
public class SubClass extends Operation{
@Override
public void getResult() {
// TODO Auto-generated method stub
System.out.println("运算结果为:"+(this.getNum1()-this.getNum2()));
}
}
③工厂#########################################
/**
* 工厂
*/
public class OperFactory {
//生产方法
public static Operation getInstance(char symble){
Operation op = null;
switch (symble) {
case '+':
op = new AddClass();
break;
case '-':
op = new SubClass();
break;
}
return op;
}
}
④调用者#########################################
public class Test {
public static void main(String[] args) throws Exception {
//关键参数“+”,工厂以超类名义生产子类,实际生产的是AddClass
Operation op = OperFactory.getInstance('+');
op.setNum1(1); //公用参数1赋值
op.setNum2(2); //公用参数2赋值
op.getResult(); //公用方法调用,调用被AddClass类覆写的getResult()方法
}
}