浅谈设计模式之工厂模式

来源:互联网 发布:网络牛牛怎么作弊 编辑:程序博客网 时间:2024/06/06 05:46
什么是工厂模式,如何判断一段代码有没有使用工厂模式?

工厂模式的第一个表象是通过工厂方法代替new操作来创建对象。如果一段代码创建对象时,没有直接new对象,则这段代码就有可能使用了工厂模式。工厂模式的第二个表象是工厂方法返回的是一个抽象接口或类,而不是一个具体的类。如果一段代码同时满足上面两个表象,我们就可以认为这段代码使用了工厂模式。

为什么要使用工厂模式,什么时候使用工厂模式?

当然,我们不可能为了使用工厂模式而使用工厂模式,使用工厂模式是为了解决设计过程中遇到的问题。相比new操作,工厂模式返回的是一个抽象的对象,而不是一个具体的对象。如果,一段代码中需要的对象是动态变化的,一会儿需要一个基类的这个子类,一会儿需要这个基类的另一个子类,我们就可以考虑用工厂模式来代替new操作创建对象。

如何使用工厂模式?

工厂模式通过工厂方法来创建对象。 工厂模式中的工厂方法主要完成两个操作:产品类型的选择,以及产品对象的创建。所以,调用工厂方法的时候,一般需要传入可以作为选择依据的参数。在Java中,工厂方法需要封装在工厂类中;在C++中,可以直接定义工厂方法。另外,在工厂模式中,可以通过定义抽象工厂来抽象工厂方法本身,增加其灵活性。

简单工厂模式举例

public class CityFactory

{
 
 static City createCity(String cityId)
 {
  if(null == cityId)
  {
   throw new NullPointerException();
  }
  if(cityId.equals("010"))
  {
   return new Beijing();
  }
  else if (cityId.equals("029"))
  {
   return new Xian();
  }
  else
  {
   throw new IllegalArgumentException("cityid = " + cityId);
  }
  
 }

}

抽象工厂模式举例

public abstract class CityFactory
{
 
  abstract City createCity(String cityId);

}

public class ChinaCityFactory extends CityFactory
{

 @Override
 City createCity(String cityId) {
  {
   if(null == cityId)
   {
    throw new NullPointerException();
   }
   if(cityId.equals("010"))
   {
    return new Beijing();
   }
   else
   {
    throw new IllegalArgumentException("cityid = " + cityId);
   }
   
  }

 }

}

public class AmericaCityFactory extends CityFactory
{

 @Override
 City createCity(String cityId) {
  {
   if(null == cityId)
   {
    throw new NullPointerException();
   }
   if(cityId.equals("010"))
   {
    return new NewYork();
   }
   else
   {
    throw new IllegalArgumentException("cityid = " + cityId);
   }
   
  }

 }

}


 

 

0 0
原创粉丝点击