zoukankan      html  css  js  c++  java
  • java设计模式: 工厂方法模式

    定义一个接口, 子类实现这个接口重写方法,工厂类帮我们创建子类的对象。

    以后我们修改业务代码就不用再原有代码的基础上进行修改直接创建新的工厂类即可,比较符合设计模式的开闭原则。

    定义一个接口:

    public interface Operation {
    
        public double getResult(double numberA, double numberB) throws Exception;
    }

    add类实现接口重写方法, 实现具体计算:

    public class Add implements Operation{
        /**
         * 加法计算
         * @param numberA
         * @param numberB
         * @return
         * @throws Exception
         */
        @Override
        public double getResult(double numberA, double numberB) throws Exception {
            return numberA + numberB;
        }
    }

    sub类实现接口重写方法, 实现具体计算:

    public class Sub implements Operation {
        /**
         * 减法计算
         * @param numberA
         * @param numberB
         * @return
         * @throws Exception
         */
        @Override
        public double getResult(double numberA, double numberB) throws Exception {
            return numberA-numberB;
        }
    }

    定义工厂接口:

    public interface Factory {
    
        public Operation createOperation() ;
    }

    add定义具体工厂类:

    public class AddFactory implements Factory{
        @Override
        public Operation createOperation() {
            System.out.println("加法运算");
            return new Add();
        }
    }

    sub定义具体工厂类:

    public class SubFactory implements Factory {
        @Override
        public Operation createOperation() {
            System.out.println("减法运算");
            return new Sub();
        }
    }

    客户端代码:

    public class Client {
        public static void main(String[] args) throws Exception {
            // 使用反射机制实例化工厂对象,因为字符串是可以通过变量改变的
            Factory addFactory = (Factory) Class.forName("com.ultiwill.test.designpattern.gongchangfangfa.AddFactory").newInstance();
    
           // 通过工厂对象创建相应的实例对象
            Operation operation = addFactory.createOperation();
            double result = operation.getResult(1, 1);
            System.out.println(result);
    
        }
    }
  • 相关阅读:
    jmeter如何引用自己编写的java文件编译的jar包
    Vue+Django REST framework 打造生鲜电商项目(学习笔记二)
    mysql笔试题
    面试遇到的问题
    Idea中maven项目pom文件中已引入testng但项目文件中无法引入@Test
    记录一次TestNg+MyBatis中的SqlSession出现的问题,问题虽然解决了但尚未明白问题原因
    PyMySQL的基本操作
    MySQL循环语句
    Vue父子组件和非父子组件间的通信
    Python的静态方法和类成员方法
  • 原文地址:https://www.cnblogs.com/chong-zuo3322/p/13755502.html
Copyright © 2011-2022 走看看