zoukankan      html  css  js  c++  java
  • 模式的秘密之工厂模式

    工厂模式概念:实例化对象,用工厂模式代替new操作

                             工厂模式包括工厂方法模式和抽象工厂模式

           抽象工厂模式是工厂方法模式的扩展

    工厂模式的意图:定义一个接口来创建对象,但让子类决定哪些类需要被实例化。

            工厂方法把实例化的工作推迟到子类中去实现。

    工厂方法模式类图

    package com.fyf;
    /**
     * 发型接口
     * @author 18401
     *
     */
    public interface HairInterface {
    	
    	//实现了发型
    	public void draw();
    }
    

      

    package com.fyf;
    
    /**
     * 发型工厂
     * @author 18401
     *
     */
    public class HairFactory {
    	/**
    	 * 根据类型来创建对象
    	 */
    	public HairInterface getHair(String key){
    		if("left".equals(key)){
    			return new LetfHair();
    		}else if("right".equals(key)){
    			return new RightHair();
    		}
    		return null;
    	}
    	public HairInterface getHairByClass(String className){
    		try {
    			HairInterface hair = (HairInterface) Class.forName(className).newInstance();
    			return hair;
    		} catch (InstantiationException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		} catch (IllegalAccessException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		} catch (ClassNotFoundException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    		return null;
    	}
    }
    

      

    package com.fyf;
    /**
     * 左偏分发型
     * @author 18401
     *
     */
    public class LetfHair implements HairInterface {
    	/**
    	 * 画了一个左偏分
    	 */
    	@Override
    	public void draw() {
    		// TODO Auto-generated method stub
    		System.out.println("----左偏分发型-----");
    	}
    
    }
    

      

    package com.fyf;
    /**
     * 右偏分发型
     * @author 18401
     *
     */
    public class RightHair implements HairInterface {
    	/**
    	 * 画了一个右偏分
    	 */
    	@Override
    	public void draw() {
    		// TODO Auto-generated method stub
    		System.out.println("----右偏分发型-----");
    	}
    
    }
    

      

    package com.fyf;
    
    public class Test {
    	//客户端
    	public static void main(String[] args) {
    		
    //		HairInterface left = new LetfHair();
    //		left.draw();
    		HairFactory factory = new HairFactory();
    //		HairInterface left = factory.getHair("left");
    //		left.draw();
    		HairInterface left = factory.getHairByClass("com.fyf.LetfHair");
    		left.draw();
    	}
    }	
    

      

  • 相关阅读:
    pip安装软件时出现Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-build*的解决方案
    tidb安装
    TIDB 5.0 安装体验 怎么快速玩起来
    利用Tampermonkey(油猴)+ IDM 实现百度云盘大文件下载(IDM安装教程)
    python字典及相关操作
    【转载】CEO:我需要什么样的产品经理?
    2014年3月第三周/第一次跳槽、心情低潮期、与老总沟通问题
    hello word!
    function(event)中的event详解
    CSS 伪类
  • 原文地址:https://www.cnblogs.com/luffe/p/8495579.html
Copyright © 2011-2022 走看看