zoukankan      html  css  js  c++  java
  • 工厂模式的介绍、优缺点

    二、工厂模式

    1.介绍

          在上一节中介绍了“简单工厂模式”,现在来介绍下“工厂模式”,在“工厂模式”和“简单工厂模式”中,最主要,最明显的区别之一是“工厂模式”下可以设立多个子工厂,而不是所有的产品有单一的工厂来生产,而是给各自特色的子工厂来生产。

    2.例子

          我们还是继续使用“计算器”来作为例子吧。由于在产品Product的结构模式变化不大,所以就不在载入(详情看“简单工厂模式”的随笔),主要载入“工厂模式”的代码

    a.父工厂接口(IFactory接口)

    import SimpleFactory.Operation;
    
    public interface IFactory {
    
    	public Operation createOperation();
    }
    

    b.子工厂(加法工厂,减法工厂,乘法工厂,除法工厂)

    import SimpleFactory.Operation;
    import SimpleFactory.OperationAdd;
    import SimpleFactory.OperationSub;
    import SimpleFactory.OperationMul;
    import SimpleFactory.OperationDiv;
    
    
    public class AddFactory implements IFactory{
    
    	public Operation createOperation() {
    		// TODO Auto-generated method stub
    		return new OperationAdd();
    	}
    }
    
    public class SubFactory implements IFactory{
    
    	@Override
    	public Operation createOperation() {
    		// TODO Auto-generated method stub
    		return new OperationSub();
    	}
    
    }
    
    public class MulFactory implements IFactory{
    
    	@Override
    	public Operation createOperation() {
    		// TODO Auto-generated method stub
    		return new OperationMul();
    	}
    
    }
    
    public class DivFactory implements IFactory{
    
    	@Override
    	public Operation createOperation() {
    		// TODO Auto-generated method stub
    		return new OperationDiv();
    	}
    
    }
    

    c.客户端

    import SimpleFactory.Operation;
    
    public class Client {
        
        public static void main(String[] args) {
        
            IFactory operFactory = new AddFactory();
            Operation oper = operFactory.createOperation();
            oper.set_numberA(1);
            oper.set_numberB(2);
            double result = oper.getResult();
            System.out.println(result);
        }
    }

    d.UML图(例子是从《大话设计模式》中借鉴而来的,这是一本很不错的书)

    3.评价:

    a.在客户端Client中可以将工厂模式的主要结构看着很清楚,首先我们要有IFactory这个工厂的父接口,所有的子类或者子接口都可以实现它。AddFactory则是子类的代表之一,所以利用java的多态来实现,降低代码的耦合性。而同时每个子工厂中拥有每条生产独特产品的生产线。由此,工厂和产品挂上钩了,联系上了。每个子工厂生产出来的都是独特的产品。

    b.比“简单工厂模式”的优缺点

    优点:克服了简单工厂违背开放-封闭原则的缺点,又保留了封装对象创建过程的优点,降低客户端和工厂的耦合性,所以说“工厂模式”是“简单工厂模式”的进一步抽象和推广。

    缺点:每增加一个产品,相应的也要增加一个子工厂,加大了额外的开发量。

  • 相关阅读:
    前端开发和网页设计的过去和未来
    Web开发人员vs网页设计师
    Linux最终将会领先于Windows、Mac OS!
    Linux 大爆炸:一个内核,无数发行版
    因PHP漏洞,超过4.5万个中国网站被攻击
    在 Linux 中自动配置 IPv6 地址
    echart-折线图,数据太多想变成鼠标拖动和滚动的效果?以及数据的默认圈圈如何自定义圆圈的样式
    用TweenMax.js动画让数字动起来
    zrender笔记----(数字Number组件)出现的问题和解决办法
    面试题常考&必考之--js中的数组去重和字符串去重
  • 原文地址:https://www.cnblogs.com/kgrdomore/p/4242081.html
Copyright © 2011-2022 走看看