设计模式-工厂模式

来源:互联网 发布:vc 多线程编程 编辑:程序博客网 时间:2024/06/05 17:49

我们在平时的编程过程中,不可避免的需要创建对象,通过工厂方法可以简化类的创建过程,并提高代码的复用性。所谓的设计模式,都是人们在平时

的编程过程中,不断优化的产物,通过这些简单的设计模式可以提高编程效率。

静态工厂模式

作为一个储户,我们都需要一张银行卡,因此我们需要一个发卡单位----就是银行。假想存在一个统一的制卡单位(中国银行),由于我们每个用户需要

的卡不一样,比如农业银行、招商银行、民生银行。。。那么我们需要给制卡单位传递一个参数,然后制卡单位根据参数返回我们需要的卡。

//工厂public class BankCardSimpleFactory {        public static BankCard getCard(String cardType){        if("abc".equals(cardType)){            return new ABCBankCard();        }else if("ICBC".equals(cardType)){            return new ICBCBankCard();        }        //依次类推        return null;    }}

随着不断发展,卡的种类越来越多,每增加一个卡种类,都需要修改工厂类,这样不满足开闭原则,因此出现了下面的简单工厂模式


简单工厂模式

现在我们可以将BankCardSimpleFactory当做工厂父类,将不同的卡交给对应的工厂子类实现。

public interface BasicBankCardFactory {        BankCard getBankCard();}
public class ICBCBankCardFactory implements BasicBankCardFactory{        public BankCard getBankCard(){        return new ICBCBankCard();            }    }

public class ABCBankCardFactory implements BasicBankCardFactory{        public BankCard getBankCard(){        return new ABCBankCard();    }}
现在不同的卡由不同的子类工厂生产,当我们需要增加其他卡时,只需要添加一个对应的Card(implements BankCard),然后创建一个新的工厂类(implements BasicBankCardFactory)即可满足我们的需求。

Mybatis中创建DataSource数据源就使用了简单工厂模式


首先定义了一个DataSourceFactory接口,通过getDataSource()方法获取DataSource对象

public interface DataSourceFactory {  void setProperties(Properties props);  DataSource getDataSource();}
然后他又根据mybatis中DataSource(UnPooledDataSource、PooledDataSource、JNDIDataSource)的不同,定义了三种相对应的DataSourceFactory工厂类
(UnPooledDataSourceFactory、UnPooledDataSourceFactory、JNDIDataSourceFactory)

public class UnpooledDataSourceFactory implements DataSourceFactory {  private static final String DRIVER_PROPERTY_PREFIX = "driver.";  private static final int DRIVER_PROPERTY_PREFIX_LENGTH = DRIVER_PROPERTY_PREFIX.length();  protected DataSource dataSource;  public UnpooledDataSourceFactory() {    this.dataSource = new UnpooledDataSource();  }  @Override  public DataSource getDataSource() {    return dataSource;  }}



原创粉丝点击