java设计模式之工厂模式例子详解

java设计模式之工厂模式例子详解 

HairFactory类

package com.kero99.ygc.project;

public class HairFactory {
	/**
	 * 设计模式(Design Pattern)
	 * 是一套被反复使用、多数人知晓的、经过分类的、代码设计经验的总结。
	 * 工厂模式概念:
	 * 实例化对象,用工厂方法代替new操作。
	 * 工厂模式包括工厂方法模式和抽象工厂模式。
	 * 抽象工厂模式是工厂方法模式的扩展。
	 * 工厂模式的意图:
	 * 定义一个接口来创建对象,但是让子类来决定哪些类需要被实例化。
	 * 工厂方法把实例化的工作推迟到子类中去实现。
	 * 工厂模式使用场景:
	 * 有一组类似的对象需要创建。
	 * 在编码时不能预见需要创建那种类的实例。
	 * 系统需要考虑扩展性,不应依赖于产品类实例如何被创建、组合和表达的细节。
	 * eg:场景脸萌↓ 
	 * @param key
	 * @return
	 */
	public HairInterface getHair(String key){
		if("left".equals(key)){
			return new LeftHair();
		}else 
		if("right".equals(key)){
			return new RightHair();
		}
		return null;
	}
	//反射实现
	public HairInterface getHairByClass(String className){
		HairInterface hair;
		try {
			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;
	
	}
	
}

HairInterface接口

package com.kero99.ygc.project;

public interface HairInterface {
	//画发型
	public void draw();
}

LeftHair 类的实现

package com.kero99.ygc.project;

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

}

RightHair 类的实现

package com.kero99.ygc.project;

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

}

Test 类

package com.kero99.ygc.project;

public class YGCTest {
	public static void main(String[] args) {
//		HairInterface left=new LeftHair();
//		left.draw();
//		HairInterface right=new RightHair();
//		right.draw();
		
//		HairFactory factory=new HairFactory();
//		HairInterface left=factory.getHair("left");
//		left.draw();
//		HairInterface right=factory.getHair("right");
//		right.draw();
		//通过具体类名称获取实例 可以用properties工具创建Class地址
		HairFactory factory=new HairFactory();
		HairInterface left= factory.getHairByClass("com.kero99.project.LeftHair");
		left.draw();
	}
	
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

南归北隐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值