产品
- 产品族:可以类成品牌,如华为的手机,电脑,电视 --> 抽象工厂
- 产品等级:可以理解成功能,如华为的手机,小米的手机,苹果的手机 --> 工厂方法
- 定义
- 抽象工厂模式提供一个创建一系列相关或相互依赖的接口
- 无需指定他们的具体类
- 适用场景
- 客户端(应用层)不依赖于产品实例如何被创建,实现等细节
- 强调一系列相关的产品对象(属于同一产品族)一起适用创建对象需要大量重复代码
- 提供了一个产品类的库,所有的产品以同样的接口出现,从而使客户端不依赖于具体实现
- 优点
- 具体产品在应用层代码隔离,无需关心创建细节
- 将一系列的产品统一到一起创建
- 缺点
- 规定了所有可能被创建的产品集合,产品族中扩展新产品困难,需要修改抽象工厂的接口
- 增加了系统的抽象性和理解难度
下面来看个代码示例…
1.创建抽象产品
// 产品族一
public interface Vedio {
void play();
}
// 产品族二
public interface Article {
public void read();
}
2.创建具体产品
// Java的Vedio
public class JavaVedio implements Vedio {
@Override
public void play() {
System.out.println("javaVedio...");
}
}
// Java的Article
public class JavaArticle implements Article {
@Override
public void read() {
System.out.println("java article...");
}
}
// golang的Vedio
public class GolangVedio implements Vedio {
@Override
public void play() {
System.out.println("golangVedio...");
}
}
// golang的Article
public class GolangArticle implements Article {
@Override
public void read() {
System.out.println("golang article...");
}
}
3.创建产品族抽象工厂
// 一个产品族(这里是Course),包含了Vedio与Article
public abstract class CourseFactory {
public abstract Vedio getVedio();
public abstract Article getArticle();
}
4.创建产品族具体工厂
public class JavaCourseFactory extends CourseFactory {
@Override
public Vedio getVedio() {
return new JavaVedio();
}
@Override
public Article getArticle() {
return new JavaArticle();
}
}
public class GolangCourseFactory extends CourseFactory {
@Override
public Vedio getVedio() {
return new GolangVedio();
}
@Override
public Article getArticle() {
return new GolangArticle();
}
}
5.通过产品族工厂创建对象
public class Test {
public static void main(String[] args) {
CourseFactory courseFactory = new JavaCourseFactory();
Video video = courseFactory.getVideo();
Article article = courseFactory.getArticle();
video.produce();
article.produce();
}
}
6.产品扩展
扩展只能扩展一族的产品。例如在Course加一个Score,那么就要修改抽象工厂,所有的具体工厂都要修改若,极易出现问题
本文标题:【设计模式】创建型:工厂模式(二)抽象工厂
本文链接:https://blog.quwenai.cn/post/10172.html
版权声明:本文不使用任何协议授权,您可以任何形式自由转载或使用。






还没有评论,来说两句吧...