模式的秘密之工厂模式

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

  

 

posted @ 2018-03-03 00:35  小白兔奶糖  阅读(183)  评论(0编辑  收藏  举报