抽象工厂模式(Abastract Factory Pattern)是指提供一个创建一系列相关或相互依赖对象的接口,无需指定他们具体的类。客户端(应用层)不依赖于产品类实例如何被创建、实现等细节,强调的是一系列相关的产品对象(属于同一产品族)一起使用创建对 象需要大量重复的代码。需要提供一个产品类的库,所有的产品以同样的接口出现,从 而使客户端不依赖于具体实现。
相当于在工厂方法里新增了产品
新增的产品INote
package factory.product.note;
public interface INote {
String note();
}
package factory.product.note;
public class JavaNote implements INote {
public String note() {
System.out.println("JavaNote.......");
return "JavaNote";
}
}
package factory.product.note;
public class PythonNote implements INote {
public String note() {
System.out.println("PythonNote.......");
return "PythonNote";
}
}
抽象工厂代码
package factory.abs;
import factory.product.course.ICourse;
import factory.product.note.INote;
public interface AbstractFactory {
ICourse createCourse();
INote createNote();
}
package factory.abs;
import factory.product.course.ICourse;
import factory.product.course.JavaCourse;
import factory.product.note.INote;
import factory.product.note.JavaNote;
public class JavaAbstractFactory implements AbstractFactory{
public ICourse createCourse() {
return new JavaCourse();
}
public INote createNote() {
return new JavaNote();
}
}
package factory.abs;
import factory.product.course.ICourse;
import factory.product.course.PythonCourse;
import factory.product.note.INote;
import factory.product.note.PythonNote;
public class PythonAbstractFactory implements AbstractFactory {
public ICourse createCourse() {
return new PythonCourse();
}
public INote createNote() {
return new PythonNote();
}
}
测试
package factory.abs;
public class AbstractFactoryTest {
public static void main(String[] args) {
AbstractFactory javaFactory = new JavaAbstractFactory();
javaFactory.createCourse().record();
javaFactory.createNote().note();
AbstractFactory pythonFactory = new PythonAbstractFactory();
pythonFactory.createCourse().record();
pythonFactory.createNote().note();
}
}