简单工厂模式

1.简介:

    简单工厂模式解决的问题是如何去实例化一个合适的对象

    核心思想是,有一个专门的类来负责对象的实例化.

2.优点:

    工厂类是整个模式的关键所在。它包含必要的判断逻辑,能够根据外界给定的信息,决定究竟应该创建哪个具体类的对象。    用户在使用时可以直接根据工厂类去创建所需的实例,而无需了解这些对象是如何创建以及如何组织的。有利于整个软件体    系结构的优化。

3.缺点:

    实现了所有实例创建的逻辑,一旦出现问题,所有类的创建将受影响,当需要新加一个类的创建时,

    需要修改工厂类的源码,丧失了可维护性,违背了"开发封闭原则",即违背了系统对扩展开发,对修改关闭的原则

4.简单工厂设计模式在java中的应用.

    JDBC操作数据库,采用数据库厂商提供的驱动程序接口和数据库管理系统进行数据交互

5.简单工厂模式实例:计算器的实现

//运算的接口
public interface Operators {
    
      double operator(double number1,double number2);

}
//减法运算实现类

public class OperatorSubtract implements Operators {

    public double operator(double number1, double number2) {
        // TODO Auto-generated method stub
        return number1-number2;
    }

}
//加法运算实现类
public class OperatorAdd implements Operators {

    public double operator(double number1, double number2) {
        
        
        return number1+number2;
    }

}

  //工厂类

//工厂类
public class BeanFactory {
    
    public static Operators getOperator(String opt){
        switch(opt){
        case "+":
            return new OperatorAdd();
        case "-":
            return new OperatorSubtract();
        default : return null;
        }
        
    }
}

  

//客户端类

public class CalculatorTest {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        // StringBuilder
        while (true) {
            try {
                Scanner sc = new Scanner(System.in);
                System.out.println("输入要操作的第一个数:");
                String number1 = sc.nextLine();
                System.out.println("输入运算符:");
                String opt = sc.nextLine();
                System.out.println("输入要操作的第二个数:");
                String number2 = sc.nextLine();
                Operators od = BeanFactory.getOperator(opt);
                if (od != null) {
                    double result = od.operator(Double.parseDouble(number1), Double.parseDouble(number2));
                    System.out.println(result);
                } else {
                    System.out.println("运算符输入有误,请重新输入");

                }
            } catch (Exception e) {
                // TODO Auto-generated catch block
                System.out.println("数字输入有误,重新输入");
            }

        }
    }

}

  

posted @ 2017-03-06 14:08  ScaleZ  阅读(178)  评论(0编辑  收藏  举报