您的位置:首页 > 其它

设计模式之工厂方法模式

2015-05-29 10:49 447 查看
工厂方法模式使用的频率非常高,在我们的日常开发中总能见到,也许你一直在使用但是却不知道其实他的名字叫工厂方法模式。

工厂方法模式的定义如下:

定义一个用于创建对象的接口,让子类决定实例化哪一个类。

工厂方法的通用类图如下:



工厂方法模式的通用代码如下:

public abstract class Creator {

public abstract <T extends Product> T factoryMethod(Class<T> c);
}


public class ConcreteCreator extends Creator {

/**
* @param c
* @return
*/
@Override
public <T extends Product> T factoryMethod(Class<T> c) {
Product product=null;

try {
product=(Product) Class.forName(c.getName()).newInstance();
} catch (Exception e) {
// TODO Auto-generated catch blockd
e.printStackTrace();
}

return (T) product;
}

}


public abstract class Product {

// 公共方法
public void sameMethod() {

}

public abstract void doSomething();
}


public class ConcreteProduct extends Product {

/**
*
* @see com.huashao.chapter.chapter08.Product#doSomething()
*/
@Override
public void doSomething() {

System.out.println("具体业务逻辑");
}

}


看完通用类图和通用代码之后,不知道大家会不会想起自己的代码是否有用过的此模式的地方

工厂模式的优点:

良好的封装性
灵活的扩展性
屏蔽产品类(产品类的实现如何变化,调用者都不需要关心,它只关心产品的接口,只要接口不变,系统中的高层模块就不需要改变)

具体应用之汽车生产

public abstract class AbstractCar {

// 每个汽车都能跑
protected abstract void run();
}


public class BenzCar extends AbstractCar {

/**
*
* @see com.huashao.chapter.chapter08.AbstractCar#run()
*/
@Override
protected void run() {

System.out.println("奔驰生产成功");
}

}


public abstract class AbstractCarFactory {

// 生产汽车
protected abstract <T extends AbstractCar> T createCar(Class<T> c);
}


public class CarFactory extends AbstractCarFactory {

/**
* 生产汽车
*
* @param c
* @return
*/
@Override
protected <T extends AbstractCar> T createCar(Class<T> c) {

AbstractCar car = null;

try {
car = (T) Class.forName(c.getName()).newInstance();
} catch (Exception e) {
System.out.println("生产汽车时发生异常:" + e.getMessage());
}

return (T) car;
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: