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);
    
        }
    }
  • 相关阅读:
    A. Generous Kefa
    1031 骨牌覆盖
    1074 约瑟夫环 V2
    1073 约瑟夫环
    1562 玻璃切割
    Ants
    1024 矩阵中不重复的元素
    1014 X^2 Mod P
    1135 原根
    1010 只包含因子2 3 5的数
  • 原文地址:https://www.cnblogs.com/chong-zuo3322/p/13755502.html
Copyright © 2011-2022 走看看