简单工厂模式
适用于工厂类负责创建的对象较少的场景,且客户端只需要传入工厂类的参数,对于如何创建对象不需要关心
// 课程接口
public interface ICourse {
public void record();
}
// 课程实现类I
public class JavaCounre implements ICourse{
public void record() {
System.out.println("record Java Course");
}
}
// 课程实现类II
public class PythonCourse implements ICourse {
public void record() {
System.out.println("record Python Course");
}
}
// 利用反射的技术实现工厂类
public class CourseFactory {
public ICourse create(Class<? extends ICourse> clazz) {
try {
if(null != clazz) return clazz.newIntance();
} catch(Exception e) {
e.printStackTrace();
}
}
}
工厂方法模式
在简单工厂模式中,随着产品数量的不断丰富,如果每个课程的创建逻辑 有区别,则工厂的职责会变得越来越多,不利于维护
在工厂方法模式中,将职能继续拆分,需要创建对象时通过对应的工厂子类来创建
// 工厂接口
public interface ICourseFactory {
ICourse create();
}
// 子工厂
public class JavaCourseFactory implements ICourseFactory {
ICourse create() {
return new JavaCourse();
}
}
抽象工厂模式
两个概念:产品等级结构和产品族
产品族:美的的多种家电
产品族:不同品牌的同一种家电
每一个品牌有自己独立的工厂
相对于工厂方法,抽象工厂模式中可以创建多个种类的产品
总结:简单工厂模式中可以根据用户的需求创建同一种不同类的产品,但是不适用于多类产品中创建的逻辑不同的情形,这个时候就需要工厂方法模式,而抽象工厂模式是在工厂方法的基础上,提供了生产不同种产品的功能