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

      

  • 相关阅读:
    kmeans 初步学习小结
    CAVASS使用经验
    分类之数据集导入matlab方法
    彩色图转化成灰度图
    阈值分割之迭代选择阈值法
    初步学习之FCM
    特征提取学习之HOG原理讲解
    特征提取初步学习之LBP算法
    CodePen.io网站前端设计开发平台
    阿里负责人揭秘面试潜规则
  • 原文地址:https://www.cnblogs.com/luffe/p/8495579.html
Copyright © 2011-2022 走看看