设计模式-创建型模式#工厂方法FactoryMethod

此例子是java的23种设计模式中的例子,很久以前就看了。今天下班看来部电影《战狼》,看完了没什么事就翻了一下书,重温了一次,以此做下笔记。


FactoryMethod工厂方法

定义一个用于创建对象的接口,让子类决定实例化哪一个类。FactoryMethod
使一个类的实例*延伸到其子类。

适用性
1、当一个类不知道它所必须创建的对象的类的时候。
2、当一个类希望由它的子类来指定它所创建的对象的时候。
3、当*将创建对象的职责委托给多个帮助*类中的某一个。并且*将希望哪一个
帮助子类是代理者这一信息局部化的时候。

参与者
1、Product
定义工厂方法所 创建的对象的接口。
2、ConcreteProduct
实现Product接口
3、Creator
声明工厂方法,该方法返回一个Product类型的对象
Creator也可以定义一个工厂方法的缺省实现,它返回一个缺省的
ConcreteProduct对象。
可以调用工厂方法以创建一个Product对象。
4、ConcreteCreator

重定义工厂方法以返回一个ConcreteProduct实例。


类图:


*roduct

package com.dsp;

public interface Work {
	void doWork();
}



ConcreteProduct
package com.dsp;

public class StudentWork implements Work {

	@Override
	public void doWork() {
		System.out.println("学生做作业!");
	}

}

package com.dsp;

public class TeacherWork implements Work {

	@Override
	public void doWork() {
		System.out.println("老师审批作业!");
	}

}



Creator
package com.dsp;

public interface IWorkFactory {
	Work getWork();
}

package com.dsp;

public class StudentWorkFactory implements IWorkFactory {

	@Override
	public Work getWork() {
		return new StudentWork();
	}

}



ConcreteCreator
package com.dsp;

public class TeacherWorkFactory implements IWorkFactory {

	@Override
	public Work getWork() {
		return new TeacherWork();
	}

}



测试类
package com.dsp;

public class Test {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		IWorkFactory studentWorkFactory = new StudentWorkFactory();
		studentWorkFactory.getWork().doWork();
		
		IWorkFactory teacherWorkFactory = new TeacherWorkFactory();
		teacherWorkFactory.getWork().doWork();
	}

}

控制台输出:

学生做作业!
老师审批作业!


posted @ 2015-06-09 00:04  Java夜未眠  阅读(24)  评论(0)    收藏  举报