如何将Java设计模式中的工厂模式应用于长尾词生成?
- 内容介绍
- 文章标签
- 相关推荐
本文共计718个文字,预计阅读时间需要3分钟。
工厂模式分为三种更细致的类型:简单工厂、工厂方法和抽象工厂。
简单工厂(Simple Factory):简单工厂被称为静态工厂方法模式,是一种静态的工厂方法模式。
假设一个场景,需要创建一个对象。
工厂模式分为三种更加细分的类型:简单工厂、工厂方法和抽象工厂。
简单工厂(Simple Factory):
简单工厂叫作静态工厂方法模式(Static Factory Method Pattern)。
假设一个场景,需要一个资源加载器,要根据不同的url进行资源加载,但是如果将所有的加载实现代码全部封装在了一个load方法中,就会导致一个类很大,同时扩展性也非常差,当想要添加新的前缀解析其他类型的url时,发现需要修改大量的源代码,
代码如下:
定义两个需要之后会用到的类:
@NoArgsConstructor
@AllArgsConstructor
@Data
public class Resource {
private String url;
}
public class ResourceLoadException extends RuntimeException{
public ResourceLoadException() {
super("加载资源是发生问题。");
}
public ResourceLoadException(String message) {
super(message);
}
}
源码如下:
public class ResourceLoader {
public Resource load(String filePath) {
String type = getPrefix(filePath);
Resource resource = null;
if("D://a.txt";
ResourceLoader resourceLoader = new ClassPathResourceLoader();
AbstractResource resource = resourceLoader.load(url);
log.info("resource --> {}",resource.getClass().getName());
}
抽象工厂(Abstract Factory)
抽象工厂模式(Abstract Factory Pattern),该设计模式的应用场景比较特殊,他的重要性比不上简单工厂和工厂方法,其定义如下:
抽象工厂模式是工厂方法模式的升级版本,在有多个业务品种、业务分类时,通过抽象工厂模式生产需要的对象是一种不错的解决方案。
在简单工厂和工厂方法中,往往只需要创建一种类型的产品,但是如果需求改变,需要增加多种类型的产品,即增加产品族,上边的需求是创建各种类型的资源,再增加一个维度,如图片资源、视频资源、文本资源等。
如果不停的增加产品维度,最后导致的结果就是产品数量不停的爆炸,以笛卡尔集的方式指数级增长,如下:
- 1、HttpPictureResource
- 2、HttpVideoResource
- 3、FilePictureResource
- 4、FileVideoResource
- ......
按照之前的逻辑,有5个产品,加3个维度,就会产生15个产品和15个产品工厂,类会迅速爆炸起来,这显然不合适。
待完成。。。。。
本文共计718个文字,预计阅读时间需要3分钟。
工厂模式分为三种更细致的类型:简单工厂、工厂方法和抽象工厂。
简单工厂(Simple Factory):简单工厂被称为静态工厂方法模式,是一种静态的工厂方法模式。
假设一个场景,需要创建一个对象。
工厂模式分为三种更加细分的类型:简单工厂、工厂方法和抽象工厂。
简单工厂(Simple Factory):
简单工厂叫作静态工厂方法模式(Static Factory Method Pattern)。
假设一个场景,需要一个资源加载器,要根据不同的url进行资源加载,但是如果将所有的加载实现代码全部封装在了一个load方法中,就会导致一个类很大,同时扩展性也非常差,当想要添加新的前缀解析其他类型的url时,发现需要修改大量的源代码,
代码如下:
定义两个需要之后会用到的类:
@NoArgsConstructor
@AllArgsConstructor
@Data
public class Resource {
private String url;
}
public class ResourceLoadException extends RuntimeException{
public ResourceLoadException() {
super("加载资源是发生问题。");
}
public ResourceLoadException(String message) {
super(message);
}
}
源码如下:
public class ResourceLoader {
public Resource load(String filePath) {
String type = getPrefix(filePath);
Resource resource = null;
if("D://a.txt";
ResourceLoader resourceLoader = new ClassPathResourceLoader();
AbstractResource resource = resourceLoader.load(url);
log.info("resource --> {}",resource.getClass().getName());
}
抽象工厂(Abstract Factory)
抽象工厂模式(Abstract Factory Pattern),该设计模式的应用场景比较特殊,他的重要性比不上简单工厂和工厂方法,其定义如下:
抽象工厂模式是工厂方法模式的升级版本,在有多个业务品种、业务分类时,通过抽象工厂模式生产需要的对象是一种不错的解决方案。
在简单工厂和工厂方法中,往往只需要创建一种类型的产品,但是如果需求改变,需要增加多种类型的产品,即增加产品族,上边的需求是创建各种类型的资源,再增加一个维度,如图片资源、视频资源、文本资源等。
如果不停的增加产品维度,最后导致的结果就是产品数量不停的爆炸,以笛卡尔集的方式指数级增长,如下:
- 1、HttpPictureResource
- 2、HttpVideoResource
- 3、FilePictureResource
- 4、FileVideoResource
- ......
按照之前的逻辑,有5个产品,加3个维度,就会产生15个产品和15个产品工厂,类会迅速爆炸起来,这显然不合适。
待完成。。。。。

