zoukankan      html  css  js  c++  java
  • 设计模式:工厂模式-文具制造工厂流程就是这样的!

    工厂模式:

    实例化对象,用工厂方法代替new操作.

    使用场景:

    当我们需要大量new的时候可以考虑使用工厂模式

    为了便于大家理解,大家可以将工厂模式想象成一个工厂制造产品就可以了。


    MakeStationery.java 制造文具-接口

    抽象工厂角色,给所有相同的制作流程制作规范

    package com.luzhiming.Factory; 
    /** 
     * @author strungle  E-mail: 645707787@QQ.com
     * @version 创建时间:2013-6-24 下午9:15:03 
     * 
     * 制造文具-接口
     */
    public interface MakeStationery {
    
    	public void makePen(Colour colour);
    }
    


    Colour.java 枚举

    package com.luzhiming.Factory; 
    /** 
     * @author strungle  E-mail: 645707787@QQ.com
     * @version 创建时间:2013-6-24 下午9:22:41 
     * 
     * 颜色枚举
     */
    public enum Colour {
    
    	RED,BLUE,GREEN;
    }
    


    MakePencialBoxFactory.java 制作铅笔盒的工厂

    package com.luzhiming.Factory; 
    /** 
     * @author strungle  E-mail: 645707787@QQ.com
     * @version 创建时间:2013-6-24 下午9:29:32 
     * 
     * 制作铅笔盒的工厂
     * 
     */
    public class MakePencialBoxFactory implements MakeStationery {
    
    	@Override
    	public void makePen(Colour colour) {
    		
    		switch(colour)
    		{
    		case RED:
    			System.out.println("制作红色的铅笔盒");
    			break;
    		case BLUE:
    			System.out.println("制作绿色的铅笔盒");
    			break;
    		case GREEN:
    			System.out.println("制作蓝色的铅笔盒");
    			break;
    			default:
    				System.out.println("制作黑色的铅笔盒");
    		}
    		
    		}
    }
    


    MakePencialFactory.java 制作铅笔的工厂

    package com.luzhiming.Factory; 
    /** 
     * @author strungle  E-mail: 645707787@QQ.com
     * @version 创建时间:2013-6-24 下午9:15:48 
     * 
     * 
     * 制作铅笔的工厂
     * 
     */
    public class MakePencialFactory implements MakeStationery {
    
    	@Override
    	public void makePen(Colour colour) {
    
    		switch(colour)
    		{
    		case RED:
    			System.out.println("制作红色铅笔");
    			break;
    		case BLUE:
    			System.out.println("制作绿色铅笔");
    			break;
    		case GREEN:
    			System.out.println("制作蓝色铅笔");
    			break;
    			default:
    				System.out.println("制作黑色铅笔");
    		}
    	}
    
    }
    


    这样我们就实现了工厂模式,当然,此处是抽象工厂模式。

    对于初学者可能会问,我们为什么要定义这么多工厂,我么直接定义一个工厂,然后然后根据不同的分支来创建对象不就可以了么,为什么还要定义一个工厂接口,然后在用不同的工厂类实现该接口呢?

    其实道理很简单:

    (1)首先,这样分离开来,不容易是正确的代码被修改错误

    (2)其次,当我们再想制造其他对象的时候,我们可以自己定义一个工厂来实现我们的接口,避免了扩展功能而要去修改正确代码的问题

    (3)制作的对象很多时候都是不一样的,不同的对象使用不同的工厂,而不同的工厂需要遵循相同的一个接口的标准

    所以我们倡导使用抽象工厂方法模式

  • 相关阅读:
    [译]为什么你要学Go?
    类Lisp解释器JavaScript实现
    前端同学Windows中生存指北
    Virtualbox
    数据发布和上线日报&周报系统开发总结
    [Lab1]五分钟了解Makefile
    解决linux下解压来自windows的zip文件产生乱码的问题
    Arch使用过程中出现的问题汇总
    jQuery为什么移除了.toggle()方法
    Linux配置DNS
  • 原文地址:https://www.cnblogs.com/snake-hand/p/3155370.html
Copyright © 2011-2022 走看看