定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到了子类。

   工厂方法模式实现,客户端进行工厂的实例化,产生哪一个工厂实例的逻辑判断依然存在。工厂方法把简单工厂内部逻辑判断转移到了客
户端。工厂方法模式就是利用了“依赖倒转原则”解决了简单工厂模式违背“开
-闭原则”的问题。



package factroyMethod;

public class Operation  {
    
private double dNumberA;
    
private double dNumberB;
    
    
public double getResults(){
        
double result = 0d;
        
return result ;
    }


    
public double getdNumberA() {
        
return dNumberA;
    }


    
public void setdNumberA(double dNumberA) {
        
this.dNumberA = dNumberA;
    }


    
public double getdNumberB() {
        
return dNumberB;
    }


    
public void setdNumberB(double dNumberB) {
        
this.dNumberB = dNumberB;
    }


    
public Operation(double dNumberA, double dNumberB) {
        
this.dNumberA = dNumberA;
        
this.dNumberB = dNumberB;
    }


    
public Operation(double dNumberA) {
        
this.dNumberA = dNumberA;
    }


    
public Operation() {
    }

}




package factroyMethod;

public interface IFactory {
    Operation getOperation();
}



package factroyMethod;


public class FactroyAdd implements IFactory {

    
public Operation getOperation() {
        
return new OperationAdd() ;
    }


}



package factroyMethod;


public class FactroySub implements IFactory {

    
public Operation getOperation() {
        
return new OperationSub() ;
    }


}



package factroyMethod;

public class FactroySqrt implements IFactory {

    @Override
    
public Operation getOperation() {
        
        
return  new OperationSqrt();
    }


}



package factroyMethod;

public class OperationAdd extends Operation {

    
public double getResults() {
        
return  getdNumberA() + getdNumberB() ;
    }

    

}



package factroyMethod;

public class OperationSub extends Operation {

    
public double getResults() {    
        
return  getdNumberA() - getdNumberB() ;
    }


}



package factroyMethod;

public class OperationSqrt extends Operation {

    @Override
    
public double getResults() {
        
return Math.sqrt(getdNumberA());
    }

    

}



package factroyMethod;

import java.util.Scanner;


public class TestCalculate {
    
public static void main(String[] args)throws Exception{        
        
while (true{
            Scanner src 
= new Scanner(System.in);
            
double a = src.nextDouble();
            String operation 
= src.next();
            
double b = src.nextDouble();
            IFactory factory 
= null ;
            
if(operation.equals("+"))factory = new FactroyAdd();
            
else if(operation.equals("-"))factory = new FactroySub();
            
else factory = new FactroySqrt();
            
            Operation opr 
=factory.getOperation();
            opr.setdNumberA(a);
            opr.setdNumberB(b);
            System.out.println(opr.getResults());
        }

    }

    
    
}


只有注册用户登录后才能发表评论。


网站导航: