当我们创建对象时,new的时候,往往多考虑下,能否用到创建类型的设计模式。本章我们讲解下 抽象工厂模式的使用及优点。
1 抽象工厂模式,从设计角度来讲,完全遵循了 开闭原则,当对程序进行拓展的时候,不必修改原有的代码,只需在原有的基础上进行添加。 这就要求 工厂 和 产品 都需要用接口来抽象化。
以下的代码分别问 学生接口及AB学生的具体实现 和工厂接口及生产AB学生的具体工厂实现。
public interface StudentInterface {
public void privateProperty();
}
public class StudentA implements StudentInterface{
@Override
public void privateProperty() {
// TODO Auto-generated method stub
System.out.println("student a");
}
}
public class StudentB implements StudentInterface{
@Override
public void privateProperty() {
// TODO Auto-generated method stub
System.out.println("student b");
}
}
///////////////////////////////////////////////////////////////////////////////////
public interface FactoryInterface {
public StudentInterface createStudent();
}
public class FactoryStudentA implements FactoryInterface{
@Override
public StudentInterface createStudent() {
// TODO Auto-generated method stub
return new StudentA();
}
}
public class FactoryStudentB implements FactoryInterface{
@Override
public StudentInterface createStudent() {
// TODO Auto-generated method stub
return new StudentB();
}
}
///////////////////////////////////
测试
public class TestAbstractFactory {
public static void main(String[] args) {
// TODO Auto-generated method stub
FactoryInterface facC=new FactoryStudentC();
StudentInterface stuC=facC.createStudent();
stuC.privateProperty();
}
}
2如果我们程序有需求,需要增加C学生,那么我们只需定义一个C学生类 实现学生接口,以及实现工厂接口用以创建生成学生C对象的工厂。
public class StudentC implements StudentInterface{
@Override
public void privateProperty() {
// TODO Auto-generated method stub
System.out.println("student c");
}
}
public class FactoryStudentC implements FactoryInterface{
@Override
public StudentInterface createStudent() {
// TODO Auto-generated method stub
return new StudentC();
}
}
从代码中,我们可以明显的体会到,当需要对程序进行拓展的时候,我们是不需去修改以前的代码的,只需两个实现类,即可完成代码的拓展功能,完全遵循了软件设计的开闭原则,是不是很爽呢?