目录
1.简单工厂模式
1)最基本的实现
简单工厂常用的方法就是一个工厂类,里面包含很多if else结构 或者switch case 、如下代码ProductA和ProductB是分别的两个不同的类:
public class Factory {
//可以在工厂类中添加任何你所需要的逻辑
public static Product create(String str){
//生成ProductA
if(str.equalsIgnoreCase("ProductA")){
return new ProductA();
}
else if(str.equalsIgnoreCase("ProductB")){ //生成ProductB
return new ProductB();
}
return null;
}
}
2)通过Map集合实现
通过传入不同的参数返回不同的对象。实际在开发中其实也是可以通过Map集合来存储的,把key存为需要查询的内容(这个Map可以提前设置,也可以配置到配置文件里面)
package com.wusu
public class Factory {
private Map<String, Product> map = new HashMap<>();
public static Product create(String product){
//通过传入的
return map.get(product);
}
}
配置文件:
<bean id="productA" class="com.wusu.ProductA">
....
</bean>
<bean id="productB" class="com.wusu.ProductB">
....
</bean>
<bean id="productFactory" class="com.wusu.Factory">
<property name="map">
<map>
<entry key="productA" value-ref="productA"></entry> //这里value-ref是引用的上面设置的bean的id
<entry key="productB" value-ref="productB"></entry>
</map>
</property>
</bean>
3) 通过反射技术实现
public class Factory {
//可以在工厂类中添加任何你所需要的逻辑
public static Product create(String str){
//LoadClassUtils 这个可以是 一个工具类,根据(比如productA)反射技术实例化一个对象
return LoadClassUtils.Load(str).newInstance();
}
}
2.工厂方法模式
简单工厂模式只是在一个工厂类中做逻辑判断,如果需要添加新的类,需要修改代码,但是上面使用Map来储存并放到配置文件中也可以实现不修改代码。工厂方法模式就是对于做逻辑判断的条件放到客户端代码实现。
优点:相比简单工厂在代码做判断,实现类“开放-封闭”原则,
缺点:每新加一个类,都需要再次添加一个工厂的实现类。如果要添加大量的类,出现大量工厂类。
具体实现可以参考别人优秀的博客:https://www.cnblogs.com/zhi-hao/p/4028169.html
3.抽象工厂模式
和工厂方法模式对比,简单来看 就是工厂的接口中多定义了不止一个方法,(工厂方法模式的接口是只有一个方法)。他是在处理一个工厂可以生产出这个产品所有附带的集合。可以通过别人的https://www.cnblogs.com/zhi-hao/p/4028169.html 文档作对比