zoukankan      html  css  js  c++  java
  • 浅谈Java设计模式——工厂方法模式(FactoryMethod)

    一、概述

            定义一个用于创建对象的接口,让子类决定实例化哪一个类。FactoryMethod使一个类的实例化延迟到其子类。

    二、使用场景

    1.当一个类不知道它所必须创建的对象的类的时候。 
    2.当一个类希望由它的子类来指定它所创建的对象的时候。
    3.当类将创建对象的职责委托给多个帮助子类中的某一个,并且你希望将哪一个帮助子类是代理者这一信息局部化的时候。

    三、类图

    四、实现代码

    Operation抽象类:

    /**
     * 运算超类
     */
    public abstract class Operation {
        public abstract double getResult(double t1, double t2);
    }

    OperationAdd类:

    /**
     * 加法操作
     */
    public class OperationAdd extends Operation {
        @Override
        public double getResult(double t1, double t2) {
            return t1 + t2;
        }
    }

    OperationSubtraction类:

    /**
     * 减法操作
     */
    public class OperationSubtraction extends Operation {
        @Override
        public double getResult(double t1, double t2) {
            return t1 - t2;
        }
    }


    Factory接口:

    /**
     * 工厂接口
     */
    public interface Factory {
        public Operation createOperation();
    }

    AddFactory类:

    public class AddFactory implements Factory {
        @Override
        public Operation createOperation() {
            return new OperationAdd();
        }
    }

    SubtractionFactory类:

    public class SubtractionFactory implements Factory {
        @Override
        public Operation createOperation() {
            return new OperationSubtraction();
        }
    }


    客户端代码:

    public class Client {
        public static void main(String[] args) {
            Factory factory = new AddFactory();
            Operation operation = factory.createOperation();
            double result = operation.getResult(2, 2);
            System.out.println("add operation result: " + result);
    
            Factory factory1 = new SubtractionFactory();
            Operation operation1 = factory1.createOperation();
            double result1 = operation1.getResult(9, 3);
            System.out.println("substractionFactory operation result: " + result1);
        }
    }
  • 相关阅读:
    搭建自己的博客(三十一):为评论以及回复添加邮箱提醒
    gl-transitions 【68个转场效果图】
    frei0r-1.7.0 20191207-0d4b342 DLLs
    Win10资源管理器始终使用详细视图模式
    gcc posix sjij for MSYS 9.2.1+
    mingw32-gcc-9.2.1-i686-posix-sjlj-20190904-8ba5c53
    Newtonsoft.Json高级用法
    在线文档预览方案-office web apps
    我的前端学习历程
    我是怎么使用最短路径算法解决动态联动问题的
  • 原文地址:https://www.cnblogs.com/IdealSpring/p/11871178.html
Copyright © 2011-2022 走看看