工厂方法模式
工厂方法模式是定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类当中。
定义一个抽象工厂和抽象产品,根据实际情况实例化具体的工厂就可获得的相应的产品。
具体角色
抽象工厂(Creator)角色:工厂方法模式的核心,任何在模式中创建对象的工厂类必须实现这个接口。
具体工厂(Concrete Creator)角色:实现抽象工厂的具体工厂类,受到应用程序调用产生具体产品对象。
抽象产品(Product)角色:产品对象的共同父类或共同接口。
具体产品(Concrete Product)角色:实现了抽象产品的具体产品类。具体产品都有专门的具体工厂创建。
例:
需求:
现在有志愿者和学生都帮忙打扫卫生。
代码实现:
抽象工厂
/**
* 工厂方法模式
* 抽象工厂角色:帮助者工厂
* 定义创建帮助者的方法
*/
public interface HelperFactory {
Helper createHelper();
}
抽象产品
/**
* 工厂方法模式
* 抽象产品角色:帮助者
* 定义帮助的方法
*/
public interface Helper {
void cleanHome();
}
具体工厂
/**
* 工厂方法模式
* 具体工厂角色:志愿者帮助者工厂
* 创建志愿者帮助者
*/
public class VolunteerHelperFactory implements HelperFactory{
@Override
public Helper createHelper() {
// TODO Auto-generated method stub
return new VolunteerHelper();
}
}
/**
* 工厂方法模式
* 具体工厂角色:学生帮助者工厂
* 创建学生帮助者
*/
public class StudentHelperFactory implements HelperFactory{
@Override
public Helper createHelper() {
// TODO Auto-generated method stub
return new StudentHelper();
}
}
具体产品
/**
* 工厂方法模式
* 具体产品角色:学生帮助者
*
*/
public class StudentHelper implements Helper{
@Override
public void cleanHome() {
// TODO Auto-generated method stub
System.out.println("偶尔帮忙打扫家里卫生");
}
}
/**
* 工厂方法模式
* 具体产品角色:志愿者帮助者
*
*/
public class VolunteerHelper implements Helper {
@Override
public void cleanHome() {
// TODO Auto-generated method stub
System.out.println("长期帮忙打扫家里卫生");
}
}
客户端
public class Client {
public static void main(String[] args) {
HelperFactory helperOneFactory=new StudentHelperFactory();
Helper helperOne=helperOneFactory.createHelper();
helperOne.cleanHome();
HelperFactory helperTwoFactory=new VolunteerHelperFactory();
Helper helperTwo=helperTwoFactory.createHelper();
helperTwo.cleanHome();
}
}