前言:工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。这种设计模式属于创建型的模式,我们在使用时不需要关心内部是如何实现的,只需要提供统一的工厂接口来指向新创建的对象即可。注:这只是初次学习时的所悟,还有很多不对的地方还望各位多多指教。
一、为什么要用工厂模式?
初学,我个人的理解是:我们的编程时针对接口编程,一个接口可能会被多个不同的实现类实现,在实例化接口子类时,我们会对实例化的子类选择会有一定的迷惑,所以,我们提供一个统一的工厂,在需要实例化的时候,我们只需要关心这个工厂为我们提供的统一接口进行调用即可。
二、工厂模式的优点
调用者想要创建一个对象,只需要知道其名称就可以了,并且也不需要关心工厂内部是如何实现。同时,如果有新的业务模块加进来,对于工厂的扩展性是非常好的。
三、工厂模式的缺点
可以这么说,他的一些优点也是它的缺点,扩展性好带来的问题就是对于系统的复杂程度增加,业务的扩展,导致工厂极速的增加,并且对于工厂中的具体类的依赖程度也增加。本着“高内聚低耦合”的原则,这显的也不是什么好事情。
四、举例
我们需要一部手机,我们首先选择去售卖点或是网上售卖点进行购买,我们不需要关心如何通过各种零件组装成的手机,这些组装手机的过程由手机工厂帮我们完成即可。同理,工厂提供的接口就如手机售卖点,而手机组装就是我们的工厂内部实现过程。
五、编程
(1)、提供一个接口,Phone.java;
/**
* 手机接口类
*/
public interface Phone{
/*
* 手机具体创造的方法,要创造手机,都要遵循此方法。
*/
void createPhone();
}
(2)、创建一个华为手机的实现类,HaWeiPhone.java;
public class HuaWeiPhone implements Phone{
@Override
public void createPhone() {
System.out.println("这里是华为手机的具体组装过程的方法");
}
}
(3)、创建一个苹果手机的实现类,IOSPhone.java;
public class IOSPhone implements Phone{
@Override
public void createPhone() {
System.out.println("这里是苹果手机的具体组装过程的方法");
}
}
(4)、创建一个工厂,生成基于给定信息的实体类对象。PhoneFactory.java;
/**
* 这里是手机生产的工厂,可以理解为将手机制造的方法为图纸,这里是真正生产的地方。
*/
public class PhoneFactory{
/*
* 根据给定的图纸标志,进行生产手机
*/
public Phone getPhone(String phoneType){
if(phoneType == null){
return null;
}
if(phoneType.equalsIgnoreCase('HUAWEI')){
return new HuaWeiPhone();
}
else if(phoneType.equalsIgnoreCase('IOS')){
return new IOSPhone();
}else{
return null;
}
return null;
}
}
(5)、手机售卖统一提货处。PhoneSale.java;
public class PhoneSale{
public static void main(String[] args) {
//到这个手机工厂提货
PhoneFactory phoneFactory = new PhoneFactory();
//告诉工厂,我要华为手机
Phone phone1 = phoneFactory.getPhone("HUAWEI");
//工厂得到我们要的手机类别,为我们立马生产出华为手机
phone1.createPhone();
//现在我又要一个IOS手机
Phone phone2 = phoneFactory.getPhone("IOS");
//工厂又为我们生产一个IOS手机
phone2.createPhone();
}
}
(6)、买到手机后的结果为:
这里是华为手机的具体组装过程的方法
这里是苹果手机的具体组装过程的方法
如有理解错误之处,望多多包涵指正。