您的位置:首页 > 其它

工厂方法模式

2016-03-14 22:55 169 查看
Define an interface for creating an Object, but let subclasses decide which class to instantiate. Factory Method lets a class defer instantiation to subclasses.

工厂方法模式通用类图



工厂方法模式通用代码

抽象产品类

public abstract class AbstractProduct {

/**
* 产品的公共方法
*/
public void method1(){
//业务逻辑处理
}

/**
* 抽象方法
*/
public abstract void method2();
}


具体产品类

public class ConcreteProduct extends AbstractProduct {

@Override
public void method2() {
//业务逻辑处理
}
}

public class ConcreteProduct1 extends AbstractProduct {

@Override
public void method2() {
//业务逻辑处理
}
}


抽象工厂类

public abstract class AbstractCreator {

/**
* 创建一个对象产品
* @param c
* @return
*/
public abstract <T extends AbstractProduct> T createProduct(Class<T> c);
}


具体工厂类

public class ConcreteCreator extends AbstractCreator {

@SuppressWarnings("unchecked")
@Override
public <T extends AbstractProduct> T createProduct(Class<T> c) {

AbstractProduct product = null;

try {
product = (AbstractProduct)Class.forName(c.getName()).newInstance();
} catch (Exception e) {
System.out.println("Exception");
}

return (T)product;
}
}


场景类

public class Client {

public static void main(String[] args) {

AbstractCreator creator = new ConcreteCreator();

AbstractProduct product = creator.createProduct(ConcreteProduct1.class);
}
}


工厂方法模式优点

良好的封装性,代码结构清晰

扩展性非常优秀

屏蔽产品类

典型的解耦框架(Spring中的DI)

工厂方法模式的使用场景

工厂方法模式是new一个对象的替代品,所以在所有需要生成对象的地方都可以使用,但是需要注意是否增加一个工厂类进行管理,增加代码的复杂度。

需要灵活的。可扩展的框架时,可以考虑采用工厂方法模式。

工厂方法模式可以用于异构项目中,如:通过WebService与一个非Java的项目交互。

可以使用在测试驱动开发的框架下。如:测试一个类A,就需要把类A有关联关系的类B也同时产生出来。

工厂方法模式简单应用(类图)及扩展

工厂方法模式的简单应用



缩小为简单工厂模式的简单应用



升级为多个工厂类的简单应用



替代单例模式的简单应用



延迟初始化的简单应用

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