提到工厂模式,有必要先说明下,工厂模式其实包含了三种模式:简单工厂模式、工厂方法模式和抽象工厂模式。其中,简单工厂模式并不属于GOF 23中设计模式中。先看下简单工厂模式。
简单工厂模式
意图
一个工厂类根据传入的参量,动态决定应该创建出哪一个产品类的实例。
简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式。
模式结构及参与者
接受客户端的请求,通过请求负责创建相应的产品对象。
工厂模式所创建对象的父类或是共同拥有的接口。可以是抽象类或接口。
实例
public void pay(String type){ if(type.equalsIgnoreCase("cash")){ //现金支付处理代码 }else if(type.equalsIgnoreCase("creditcard")){ //信用卡支付处理代码 } else if(type.equalsIgnoreCase("voucher")){ //代金券支付处理代码 }else{ …… } }那么上述代码,我们可以看出,此段代码带有很多的判断逻辑,较为复杂,难以维护。下面对上述代码进行重构。
public abstract class AbstractPay{ public abstract void pay(); }
public class CashPay extends AbstractPay{ public void pay(){ //现金支付处理代码 } }
public class PayMethodFactory{ public static AbstractPay getPayMethod(String type){ if(type.equalsIgnoreCase("cash")){ return new CashPay(); //根据参数创建具体产品 } else if(type.equalsIgnoreCase("creditcard")){ return new CreditcardPay(); //根据参数创建具体产品 } …… } }
简单工厂模式的要点在于:当你需要什么,只需要传入一个正确的参数,就可以获取你所需要的对象,而无需知道其创建细节。
public final static DateFormat getDateInstance(); public final static DateFormat getDateInstance(int style); public final static DateFormat getDateInstance(int style,Locale locale);