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

    工厂是一种创建型的设计模式,常用于封装变化,一般遵循那里有变化就封装那里的原则。
    简单工厂模式又 叫静态工厂方法模式(Static FactoryMethod Pattern),是通过专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。
    创建对象实例时,不要直接 new 类, 而是把这个 new 类的动作放在一个工厂的方法中,并返回。
    不要让类继承具体类,而是继承抽象类或者是实现 interface(接口)
    不要覆盖基类中已经实现的方法。

    以一个java面试题为例 --> 使用java实现一个计算机+-*/,得到结果。
    常规写法:
    package com.ytkj.design.model.factory.calculate;
    
    /**
     * 以一个java面试题为例 --> 使用java实现一个计算机加减乘除得到结果
     */
    public class Computer {
        private String calculate;//计算符号
    
        public String getCalculate() {
            return calculate;
        }
    
        public void setCalculate(String calculate) {
            this.calculate = calculate;
        }
    
        public int getResult(int a, int b) {
            if ("+".equals(calculate)) {
                return a + b;
            } else if ("-".equals(calculate)) {
                return a - b;
            } else if ("*".equals(calculate)) {
                return a * b;
            } else {
                return a / b;
            }
        }
    }
    
    class Test {
        public static void main(String[] args) {
            Computer computer = new Computer();
            computer.setCalculate("-");
            int result = computer.getResult(10, 20);
            System.out.println(result);
        }
    
    }
    /*
    上面的写法实现虽然简单,但是却没有面向对象的特性,代码拓展性差。
    (工厂模式一般遵循那里有变化就封装那里的原则),在面向对象编程语言中,一切都是对象,所以上面 运算符号(既然这里有变化那么我们就进行封装)  也应当作对象来处理。
     */

    改进:

    public interface Operation {
        int getResult(int a,int b);
    }
    public class Add implements Operation {
        @Override
        public int getResult(int a, int b) {
            return a+b;
        }
    }
    public class Subtraction implements Operation {
        @Override
        public int getResult(int a, int b) {
            return a-b;
        }
    }
    public class Multiplication implements Operation {
        @Override
        public int getResult(int a, int b) {
            return a*b;
        }
    }
    public class Division implements Operation {
        @Override
        public int getResult(int a, int b) {
            return a/b;
        }
    }
    package com.ytkj.design.model.factory.calculate.improve;
    
    /**
     * 使用简单工厂模式实现根据不同的情况创建不同的对象。
     */
    public class SimpleFactory {
        public static Operation getOperation(String operation) {
            switch (operation) {
                case "+":
                    return new Add();
                case "-":
                    return new Subtraction();
                case "*":
                    return new Multiplication();
                default:
                    return new Division();
            }
        }
    }
    
    class Test{
        public static void main(String[] args) {
            Operation operation = SimpleFactory.getOperation("+");
            int result = operation.getResult(6, 2);
            System.out.println(result);
        }
    }
  • 相关阅读:
    知多少进程?
    提高.NET应用性能
    战术设计DDD
    win7下exe文件设置为开机启动
    CQRS项目
    DDD总览
    ML.Net Model Builder
    MySQL主主复制搭建教程收集(待实践)
    MySQL主从复制搭建教程收集(待实践)
    MySQL集群方案收集
  • 原文地址:https://www.cnblogs.com/yscec/p/13557354.html
Copyright © 2011-2022 走看看