zoukankan      html  css  js  c++  java
  • 简单工厂模式

    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;
            }
            
        }
    }
    View Code

    //客户端类

    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("数字输入有误,重新输入");
                }
    
            }
        }
    
    }
    View Code

        

  • 相关阅读:
    redis运维的一些知识点
    nginx 实现Web应用程序的负载均衡
    JQuery中常用方法备忘
    高效程序猿之 VS2010快速生成代码模板
    C# var 隐式类型 var 用法 特点
    HTML之打开/另存为/打印/刷新/查看原文件等按钮的代码
    js函数大全(2)
    js常用函数大全107个
    js键盘键值大全
    js键盘键值大全
  • 原文地址:https://www.cnblogs.com/2nao/p/6509432.html
Copyright © 2011-2022 走看看