工厂方法模式就是通过一个工厂来创建对象,工厂方法模式分为三种,普通工厂模式,多个工厂方法模式,静态工厂方法模式
/**
* 声明一个跑的接口
* @author heyanpeng
*
*/
public interface Run {
public void run();
}
创建两个实现类
/**
* 实现类BoyRun
* @author heyanpeng
*
*/
public class BoyRun implements Run {
@Override
public void run() {
System.out.println("Boy Run...");
}
}
/**
* 实现类GirlRun
* @author heyanpeng
*
*/
public class GirlRun implements Run {
@Override
public void run() {
System.out.println("Girl Run...");
}
}
一 丶普通工厂模式
普通工厂模式,就是建立一个工厂类,对实现了同一接口的一些类进行实例的创建。
/**
* 创建一个工厂类,根据传入类型生产出对应的实现类实例
* @author heyanpeng
*
*/
/**
* 创建一个简单工厂类,根据传入类型生产出对应的实现类实例
* @author heyanpeng
*
*/
public class RunOrdinaryFactory {
public Run createRun(String type){
if(type.equals("girl")){
return new GirlRun();
}
if(type.equals("boy")){
return new BoyRun();
}
else{
return null;
}
}
}
二 丶多个工厂方法模式
/**
* 创建一个多个工厂模式类
* 是对普通工厂方法模式的改进,在普通工厂方法模式中,如果传递的字符串出错,则不能正确创建对象,
* 而多个工厂方法模式是提供多个工厂方法,分别创建对象。
* @author heyanpeng
*
*/
public class RunMoreFactory {
// 创建BoyRun实例
public Run createBoyRun(){
return new BoyRun();
}
// 创建GirlRun实例
public Run createGirlRun(){
return new GirlRun();
}
}
三 丶静态工厂方法模式
/**
* 将多个工厂模式类的方法静态化,直接通过类名.方法名调用
* @author heyanpeng
*
*/
public class StaticFactory {
// 创建BoyRun实例
public static Run createBoyRun(){
return new BoyRun();
}
// 创建GirlRun实例
public static Run createGirlRun(){
return new GirlRun();
}
}
测试:
public static void main(String[] args) {
// 普通工厂类测试
RunOrdinaryFactory ordinaryfactory = new RunOrdinaryFactory();
Run run= ordinaryfactory.createRun("girl");
run.run(); //Girl Run...
// 多工厂模式测试
RunMoreFactory moreFactory = new RunMoreFactory();
Run run2 = moreFactory.createBoyRun();
run2.run();//Boy Run...
// 静态工厂模式
Run run3 = StaticFactory.createGirlRun();
run3.run();//Girl Run...
}
** 总结,工厂模式适合:凡是出现了大量的产品需要创建,并且具有共同的接口时,可以通过工厂方法模式进行创建。在以上的三种模式中,第一种如果传入的字符串有误,不能正确创建对象,第三种相对于第二种,不需要实例化工厂类,所以,大多数情况下,我们会选用第三种——静态工厂方法模式。**