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

来源:互联网 发布:ubuntu 一键lamp 编辑:程序博客网 时间:2024/05/16 09:17
工厂方法模式的本质:延迟到子类来选择实现
package com;public interface Api {void opreation(String s);}
package com.impl;import com.Api;public class ImplA implements Api {@Overridepublic void opreation(String s) {System.out.println("我是A的实现:" + s);}}
package com.impl;import com.Api;public class ImplB implements Api {@Overridepublic 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 如果一个类本身就希望由他的子类来创建所需要的对象的时候,应该使用工厂方法模式。

 

原创粉丝点击