java简单工厂设计模式

   工厂模式主要是为创建对象提供了接口。工厂模式按照《Java与模式》中的提法分为三类: 
   1. 简单工厂模式(Simple Factory) 
   2. 工厂方法模式(Factory Method) 
   3. 抽象工厂模式(Abstract Factory) 
   这三种模式从上到下逐步抽象,并且更具一般性。还有一种分类法,就是将简单工厂模式看为工厂方法模式的一种特例,两个归为一类。下面是使用工厂模式的两种情况: 
  1.在编码时不能预见需要创建哪种类的实例。 
  2.系统不应依赖于产品类实例如何被创建、组合和表达的细节        

  今天给大家讲一下简单工厂设计模式,首先大家先理解下面一个例子

          女娲抟土造人

          话说:“天地开辟,未有人民,女娲抟土为人。”女娲需要用土造出一个个的人,但在女娲造出人之前,人的概念只存在于女娲的思想里面。
女娲造人,这就是简单工厂模式的应用。 
  首先,在这个造人的思想里面,有几个重要的角色:女娲本身、抽象的人的概念和女娲所造出的一个个具体的人。
  1.)女娲是一个工厂类,也就是简单工厂模式的核心角色。

        2.)具休的一个个的人,包括张三,李四等。这些人便是简单工厂模式里面的具体产品角色

  3.)抽象的人是最早只存在于女娲的头脑里的一个想法,女娲按照这个想法造出的一个个具体的人,便都符合这个抽象的人的定义。换言之,这个抽象的想法规定了所有具体的人必须都有的接口(特征或者功能)
  其UML类图出下所示:

      

     下面继续给出一个运算器的代码例子,让大家更好的理解简单工厂设计模式的运用

     先构造一个运算器接口

     Operation.java

     

public class Operation {
	
	public double numberA;
	public double numberB;
	
	public double getResult() throws Exception{
		return 0;
	}
}
      具体算法的类

     OperationAdd.java

     

public class OperationAdd extends Operation{
	
	public double getResult(){
		return numberA+numberB;
	}
}
     OperationSub.java

public class OperationSub extends Operation {

	public double getResult()  {
		
		return numberA - numberB;
	}

}
     OperationMul.java

public class OperationMul extends Operation{

	public double getResult(){
		return numberA * numberB;
	}
}

    OperationDiv.java

public class OperationDiv extends Operation{
	
	public double getResult() throws Exception{
		if (numberB == 0) {
			throw new Exception("除数不能为0");
		}
		return numberA / numberB;
	}
}

    创建一个运算工厂

    OperationFactory.java

    

public class OperationFactory {
	
	 public static Operation createOperation(char operator) {  
		    System.out.println("正在运算"+operator+"的算法...");
	        Operation opr = null;  
	        switch (operator) {  
	        case '+':  
	            opr = new OperationAdd();  
	            break;  
	        case '-':  
	            opr = new OperationSub();  
	            break;  
	        case '*':  
	            opr = new OperationMul();  
	            break;  
	        case '/':  
	            opr = new OperationDiv();  
	            break;  
	        default:  
	            break;  
	        }  
	        return opr;  
	    }  
}
     UIMain.java

import java.util.Scanner;


public class UIMain {
	   public static void main(String[] args) throws Exception{  
	        Scanner scanner = new Scanner(System.in);  
	          
	        System.out.println("请输入第一个操作数");  
	        double numberA = scanner.nextDouble();  
	          
	        System.out.println("请输入操作符");  
	        String operator = scanner.next();  
	          
	        System.out.println("请输入第二个操作符");  
	        double numberB = scanner.nextDouble();  
	          
	        char[] strChar = operator.toCharArray();
	          
	        Operation opr = OperationFactory.createOperation(strChar[0]);  
	        opr.numberA = numberA;  
	        opr.numberB = numberB;  
	          
	        double result = opr.getResult();  
	        System.out.println("运算结果为: " + result);  
	    }  
}

     以上是一个简单的例子,如果对工厂模式的认识还是很模糊的话,请看下一个例子(后续)


     

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值