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

      

  • 相关阅读:
    config文件 反射方法
    模块"xxxx.dll"已加载,但对DllRegisterServer的调用失败,错误代码为 XXXXXXXXX
    多线程定时 每天执行
    监控windows服务,当服务停止后自动重启服务
    log4net使用(winform)
    sql 第 10条 到20条
    windows 服务
    安卓屏幕模拟器
    dg_MeetingRoom 居中显示
    sql 清空所有数据
  • 原文地址:https://www.cnblogs.com/luffe/p/8495579.html
Copyright © 2011-2022 走看看