工厂模式
实现了创造者和调用者的分离
核心本质
实例化对象用工厂方法代替new操作
将选择实现类、创建对象统一管理和控制,从而将调用者跟我们的实现类解耦
详细分类
① 简单工厂模式
用来生产同一等级结构中的任意产品。(对于增加新的产品,需要修改已有代码)
② 工厂方法模式
用来生产同一等级结构中的固定产品。(支持增加任意产品)
③ 抽象工厂模式
用来生产不同产品族的全部产品。(对于增加新的产品,无能为力,支持增加产品族)
不用简单工厂模式
//创建一个手机接口
public interface Phone{
void call();
}
class Mi implement Phone{
@Override
void call(){
System.out.println("Mi");
}
}
class HUAWEI implement Phone{
@Override
void call(){
System.out.println("HUAWEI");
}
}
在没有使用简单工厂模式的时候要使用Phone接口的实现类只有通过new操作(或者反射)
public void main(String[] args){
Phone mi = new Mi();
Phone huawei = new HUAWEI();
mi.call();
huawei.call();
}
在没有使用简单工厂模式的时候,我们要考虑接口类,还要考虑实现类,并且不能实现创建者和使用者分离
使用简单工厂模式(SimpleFactory)
简单工厂模式也叫静态工厂模式,就是工厂类一般是使用静态方法,接收的参数的不同(或调用的方法不同)来返回不同的对象实例
//根据参数创建需要的对象
public class SimplePhoneFactory{
public static Phone newPhone(String type){
if(type.equal("mi")){
return new Mi();
}else if(type.equal("huawei")){
return new HUAWEI();
}else{
return null;
}
}
}
//或者直接调用静态方法获取
public class SimplePhoneFactory{
public static Phone mi(){
return new Mi();
}
public static Phone huawei(){
return new HUAWEI();
}
}
或许看上去简单工厂模式的代码更加繁琐一些,但是简单工厂模式获取对象的时候不用考虑Mi和HUAWEI两个类,只需要知道想要获取Phone接口的实现类调用工厂模式的方法即可,不但实现了创建者和使用者分离降低了代码的耦合度,还避免了对类的关系的考虑,但是简单工厂模式不修改代码的话无法扩展(违反OCP原则),所以就要用到后面的工厂方法模式和抽象工厂模式了
我会在后面的博客中一次展示工厂方法模式和抽象工厂模式的用法,简单的工厂模式可以当做一个很好的思维引导,让大家在后面的工厂方法模式和抽象工厂模式中更加容易理解