浅谈设计模式之工厂模式
来源:互联网 发布:网络牛牛怎么作弊 编辑:程序博客网 时间: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);
}
}
}
}
- 浅谈设计模式之工厂模式
- 浅谈设计模式之简单工厂模式
- 浅谈设计模式之工厂方法模式
- 浅谈工厂设计模式
- 浅谈设计模式之简单工厂模式与策略模式
- 浅谈设计模式之简单工厂模式、工厂模式、抽象工厂模式
- 菜鸟之路-浅谈设计模式之工厂模式
- 浅谈Java设计模式之简单工厂模式
- 浅谈DAO工厂设计模式
- 浅谈DAO工厂设计模式
- 设计模式--浅谈工厂方法模式
- 设计模式--浅谈抽象工厂模式
- 设计模式之工厂模式
- 设计模式之工厂模式
- 设计模式之工厂模式
- 设计模式之工厂模式
- 设计模式之工厂模式
- 设计模式之工厂模式
- 帝国cms所在位置[!--newsnav--]在哪里修改?
- 当生活很艰难,你想要放弃的时候,请记住,生活充满了起起落落,如果没有低谷,那站在高处也失去了意义
- bfgtcnhgvn
- 浅谈Swift语法
- BZOJ1026
- 浅谈设计模式之工厂模式
- IOS消息推送
- ICCV 2013的人脸特征点检评测
- 读《大数据时代》有感
- 什么是ISTQB认证
- 函 数
- Python备份之Win7源码
- 镍氢电池怎么修复充电
- Word2003及Excel2003打开速度慢,如何解决?