您的位置:首页 > 其它

设计模式2--工厂方法模式(Factory Method)

2013-11-27 16:19 330 查看
工厂方法模式的本质:延迟到子类来选择实现
package com;

public interface Api {
void opreation(String s);
}
package com.impl;
import com.Api;
public class ImplA implements Api {

@Override
public void opreation(String s) {
System.out.println("我是A的实现:" + s);
}

}
package com.impl;
import com.Api;
public class ImplB implements Api {

@Override
public void opreation(String s) {
System.out.println("我是B的实现:" + s);
}

}
import com.Api;

public abstract class AbstractFactory {
public void opreation(String s){
Api api = factoryMethed();
api.opreation(s);
}

protected abstract Api factoryMethed();
}
import com.Api;
import com.impl.ImplA;

public class FactoryA extends  AbstractFactory{

protected Api factoryMethed(){
return new ImplA();
}
}
import com.Api;
import com.impl.ImplB;

public class FactoryB extends  AbstractFactory{

protected Api factoryMethed(){
return new ImplB();
}
}
public class Client {
public static void main(String[] args){
AbstractFactory fA = new FactoryA();
fA.opreation("SHIXIN");
AbstractFactory fB = new FactoryB();
fB.opreation("AXUE");
}
}


从本质上讲,它们确实是非常类似的,在具体的实现上都是“选择实现”。但是也存在不同点,简单工厂是直接在工厂类里面进行“选择实现”;而工厂方法会把这个工作延迟大盘子类来实现,工厂类里面使用工厂方法的地方是依赖于抽象而不是具体的实现,从而使得系统更加灵活,具有更好的维护性和可扩展性。

从某个角度来讲,可以认为简单工厂就是工厂方法模式的一种特例,因此它们的本质是类似的,也就不足为奇了。

建议在以下情况中选用工厂方法模式:

1 如果一个类需要创建某个接口的对象,但是又不知道具体的实现,这种情况下可以选用工厂方法模式,把创建对象的工作延迟到子类去实现。

2 如果一个类本身就希望由他的子类来创建所需要的对象的时候,应该使用工厂方法模式。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: