首页 > 其他 > 详细

工厂方法模式

时间:2020-03-25 23:01:45      阅读:85      评论:0      收藏:0      [点我收藏+]

工厂方法模式

定义

定义一个创建对象的接口,但让实现这个接口的类来决定实例化哪个类,工厂方法让类的实例化推迟到子类中进行。

 

类型

创建型

适用场景

创建对象需要大量重复的代码

客户端(应用层)不依赖于产品类实例如何被创建、实现等细节

一个类通过其子类来指定创建哪个对象

优点

用户只需要关心所需产品对应的工厂,无需关心细节创建

加入新的产品符合开闭原则,提高可扩展性

缺点

类的个数容易过多增加复杂度

增加了系统的抽象性和理解难度

 

例子

   抽象产品

public abstract class FormatConverter {
public abstract void produce();
}

派生的Txt数据转换产品
public class TxtFormatConverter extends FormatConverter {
@Override
public void produce() {
System.out.println("转换Txt为XML格式");
}
}


派生的Database数据转换产品
public class DatabaseFormatConverter extends FormatConverter {
@Override
public void produce() {
System.out.println("转换Database数据为XML格式");
}
}


派生的Excel数据转换产品
public class ExcelFormatConverter extends FormatConverter {
@Override
public void produce() {
System.out.println("转换Excel数据为XML格式");
}
}


抽象工厂
public abstract class FormatConverterFactory{
public abstract FormatConverter getFormatConverter();

}


生产Database数据转换产品的工厂
public class ExcelFormatConverterFactory extends FormatConverterFactory {
@Override
public FormatConverter getFormatConverter() {
return new DatabaseFormatConverter();
}
}


生产Database数据转换产品的工厂
public class DatabaseFormatConverterFactory extends FormatConverterFactory {
@Override
public FormatConverter getFormatConverter() {
return new DatabaseFormatConverter();
}
}


生产Excel数据转换产品的工厂
public class ExcelFormatConverterFactory extends FormatConverterFactory {
@Override
public FormatConverter getFormatConverter() {
return new ExcelFormatConverter();
}
}

测试类
public class Test {
public static void main(String[] args) {
FormatConverter formatConverter = new ExcelFormatConverterFactory().getFormatConverter();
formatConverter.produce();
formatConverter = new DatabaseFormatConverterFactory().getFormatConverter();
formatConverter.produce();
formatConverter = new TxtFormatConverterFactory().getFormatConverter();
formatConverter.produce();
}
}
输出:  

   转换Excel数据为XML格式
   转换Database数据为XML格式
   转换Txt为XML格式

UML

技术分享图片

 

 

 

 





工厂方法模式

原文:https://www.cnblogs.com/pandayo/p/12570384.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!