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

    工厂方法模式概述

    有一个抽象类(接口),负责抽象出某个产品线(类),每多出一个产品,则继承该产品线(类或实现接口),创建一个新的类,由此每次多出一个产品的时候,无需操作原有类的内容,只需要新建一个类继承原产品线(实现接口)即可。

    以下我们仍然以一个简单的计算器作为例子

    定义每个运算逻辑

    //运算方法接口
    public interface Operator {
    	public int getResult(int number1, int number2);
    }
    
    //各个运算方法类
    //加法
    public class Addition implements Operator{
    	public int getResult(int number1, int number2) {
    		return number1 + number2;
    	}
    }
    
    //减法
    public class Subtraction implements Operator{
    	public int getResult(int number1, int number2) {
    		return number1 - number2;
    	}
    }
    
    //乘法
    public class Multiplication implements Operator {
    	public int getResult(int number1, int number2) {
    		return number1 * number2;
    	}
    }
    
    //除法
    public class Divition implements Operator {
    	public int getResult(int number1, int number2) {
    		return number1 / number2;
    	}
    }
    
    

    工厂类

    //负责操作的工厂接口 也视为一个 产品线
    public interface IFactory {
    	public Operator CreateOperation();
    }
    
    //加法工厂
    public class AddFactory implements IFactory {
    	public Operator CreateOperation() {
    		return new Addition();
    	}
    }
    //减法工厂
    public class SubFactory implements IFactory {
    	public Operator CreateOperation() {
    		return new Subtraction();
    	}
    }
    //乘法工厂
    public class MultiFactory implements IFactory {
        public Operator CreateOperation() {
    		return new Multiplication();
    	}
    }
    //除法工厂
    public class DivitFactory implements IFactory {
        public Operator CreateOperation() {
    		return new Divition();
    	}
    }
    
    //测试函数
    public class TestMain {
    	public static void main(String[] args) {
            //由当前调用的客户端来决定实例化哪个工厂的运算类
    	    IFactory methodfactory = new MultiFactory();
    		Operator operator = methodfactory.CreateOperation();
    		System.out.println(operator.getResult(2, 3));
    	}
    }
    

    总结

    简单工厂模式对比:
            简单工厂模式的优点是将必要的判断交由工厂类进行,客户端避免了对具体产品的依赖;缺点是每次新增一个新的产品时需要改工厂类的源码,违背了开闭原则
            工厂方法模式实现时,需要由客户端通过实例化指定工厂来决定实现指定运算类,工厂方法简单工厂的内部逻辑判断移到了客户端进行,当有新产品出现时也只需要继承父类(接口)编写新类即可。

    才疏学浅,如文中有错误,感谢大家指出。 

  • 相关阅读:
    在 Cocos2d-x 中添加自己的微博链接
    关于屏幕适配
    [抽象工厂模式]在游戏开发中的应用
    字符串排列组合
    子矩阵最大和
    网易游戏编程题第二题
    动态规划,最大子段和
    C++的四种显示类型转换
    多线程编程
    预处理等等
  • 原文地址:https://www.cnblogs.com/runningRookie/p/11108776.html
Copyright © 2011-2022 走看看