工厂模式

来源:互联网 发布:做菜软件哪个好 编辑:程序博客网 时间:2024/04/29 09:05

package com.test.design.factory;public interface IWork {public void howToDo();public void doing();}

package com.test.design.factory;public class Farmer implements IWork {@Overridepublic void doing() {System.out.println("正在种地...");}@Overridepublic void howToDo() {System.out.println("该工作就是种地...");}}

package com.test.design.factory;public class Teacher implements IWork {@Overridepublic void doing() {System.out.println("正在教小朋友读书...");}@Overridepublic void howToDo() {System.out.println("该工作就是教小朋友读书...");}}

package com.test.design.factory;import java.util.HashMap;public class Factory {//延迟初始化用(在类初始化很消耗资源的情况比较实用)private static HashMap<String, IWork> works = new HashMap<String, IWork>();public static IWork createWork(Class c){IWork work = null;try {if(works.containsKey(c.getSimpleName())){return works.get(c.getSimpleName());}else{work = (IWork)Class.forName(c.getName()).newInstance();works.put(c.getSimpleName(), work);}} catch (InstantiationException e) {e.printStackTrace();} catch (IllegalAccessException e) {e.printStackTrace();} catch (ClassNotFoundException e) {e.printStackTrace();}return work;}}

package com.test.design.factory;public class employer {public static void main(String[] args) {IWork teacher = Factory.createWork(Teacher.class);teacher.howToDo();teacher.doing();IWork farmer = Factory.createWork(Farmer.class);farmer.howToDo();farmer.doing();}}