一、简单工厂

来源:互联网 发布:红米note2网络 编辑:程序博客网 时间:2024/04/27 04:23

    工厂适用于生产,生产出不同的对象,这些对象都有着相同的特性,又有着各自独特的地方。

    基本结构如下:   
    ①、超类,或许可设计成抽象的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()方法 }}
原创粉丝点击