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));
    	}
    }
    

    总结

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

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

  • 相关阅读:
    hdu 5365 Run(BC 50 B题)(求四边形的个数)
    浏览器网页推断手机是否安装IOS/Androidclient程序
    外包项目总结
    HDOJ 1534 Schedule Problem 差分约束
    JavaScript入门:003—JS中的变量
    关于产品的一些思考——(三十九)瀑布流载入
    从头认识java-15.7 Map(4)-介绍HashMap的工作原理-hash碰撞(常常作为面试题)
    CodeForce 424C Magic Formulas
    HDU 3400 Line belt (三分再三分)
    oracle跨数据库跨用户訪问注意事项
  • 原文地址:https://www.cnblogs.com/runningRookie/p/11108776.html
Copyright © 2011-2022 走看看