抽象工厂
提供了一个创建一系列相关或相互依赖对象的接口
无需指定具体的类
将一组具有统一主题单独的工厂封装起来
适用场景
客户端不依赖于产品类实例如何被创建实现等细节
强调一系列相关的产品对象(属于统一产品族)一起使用创建对象需要大量的重复代码
提供了一个产品类的库,所有的产品以同样的接口出现,从而使客户端不依赖于具体的实现
优点
具体产品在应用层代码隔离,无需关心创建细节
将一个系列的产品族统一到一起创建
缺点
规定了所有可能被创建的产品集合,产品族中扩展新的产品困难,需要修改抽象工厂接口
增加的系统抽象性和理解难度
由类图可以看出课程工厂可以生产某一个产品族,通过联系java课程工厂生产java视频和笔记
//课程工厂
//课程包括视频和笔记
public interface CourseFactory {
Video getVideo();
Note getNote();
}
//java课程工厂
public class JavaCourseFactory implements CourseFactory {
@Override
public Video getVideo() {
return new JavaVideo();
}
@Override
public Note getNote() {
return new JavaNote();
}
}
//生产笔记
public abstract class Note {
public abstract void product();
}
//生产视频
public abstract class Video {
public abstract void product();
}
//生产java视频
public class JavaVideo extends Video {
@Override
public void product() {
System.out.println("生产java视频");
}
}
//生产java笔记
public class JavaNote extends Note {
@Override
public void product() {
System.out.println("生产java笔记");
}
}