设计模式-创建型-工厂方法(Factory Method)
创建型-工厂方法
前面已经写过抽象工厂。其实工厂方法应该放在抽象方法前面,抽象工厂中,大工厂可以生产多个产品。而在工厂方法个,每个工厂生产一个产品。
假设我们定义用于导出的文件对象的接口(工厂生产的产品类型)
ExportFileApi.java
public interface ExportFileApi { public void export(); }
导出文件中,可以导出数据到文本文件,也可以导出数据到数据库。
接口ExportFileApi的实现
ExportTxtFile.java
public class ExportTxtFile implements ExportFileApi { @Override public void export() { System.out.println("导出数据到文本文件"); } }
ExportDB.java
public class ExportDB implements ExportFileApi { @Override public void export() { System.out.println("导出数据到数据库备份文件"); } }
产品已经有了,现在我们需要设计我们的工厂了。
每个工厂生产一个产品。有多个产品,则需要多个工厂。现在定义一个工厂接口。
ExportOperate.java
public interface ExportOperate { public ExportFileApi factoryMethod(); }
创建具体的工厂:
ExportDBOperate.java
public class ExportDBOperate implements ExportOperate { @Override public ExportFileApi factoryMethod() { return new ExportDB(); } }
ExportTxtFileOperate.java
public class ExportTxtFileOperate implements ExportOperate { @Override public ExportFileApi factoryMethod() { return new ExportTxtFile(); } }
好了,写到这里,工厂方法已经写完了。看到没有,其实抽象工厂就是在这个的基础之上,工厂可以生产多次产品。
使用工厂。
FactoryMethodTest.java
public class FactoryMethodTest { public static void main(String[] args) { //创建工厂 ExportOperate operate = new ExportTxtFileOperate(); //创建产品 ExportFileApi xportFileApi = operate.factoryMethod(); xportFileApi.export(); } }
运行结果:
导出数据到文本文件
缺点:
工厂与具体产品耦合太高,要是需要新的产品,就需要新的工厂,容易导致工厂泛滥。
扩展:
spring提供了一种解决工厂泛滥的方式:BeanFactory。这是我们不需要产生多个工厂,只有一个工厂,工厂可以产生各种实例。但不是说Spring的BeanFactory就是比工厂方法好,需要看具体使用。
posted on 2019-06-04 20:43 xingshouzhan 阅读(129) 评论(0) 编辑 收藏 举报