• 模式的秘密之工厂模式


    工厂模式概念:实例化对象,用工厂模式代替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();
    	}
    }	
    

      

  • 相关阅读:
    深入浅出JavaScript (一)初识
    “0”基础让你学会 GridView (一)
    VS 中PageLayout 属性设置
    ASP.NET Forms身份认证
    教务系统数据库设计 (一)
    深入浅出Javascript(三)创建自定义对象以及属性、方法
    .NET 中的Cache
    深入浅出JavaScript (二) 代码放置位置与执行顺序
    触发器特殊的存储过程
    ASP.NET与JavaScript轻松实现输入信息验证
  • 原文地址:https://www.cnblogs.com/luffe/p/8495579.html
Copyright © 2020-2023  润新知