java设计模式----工厂方法模式

来源:互联网 发布:假钞在淘宝中的暗语 编辑:程序博客网 时间:2024/06/05 16:12

分为四部分:方法接口,方法具体实现,工厂接口,工厂具体实现

方法接口:

public interface Operation {    public void operate();}

方法具体实现:

public class AddOperation implements Operation {    @Override    public void operate() {        System.out.println("加法");    }}

public class SubOperation implements Operation {    @Override    public void operate() {        System.out.println("减法");    }}

工厂接口:

public interface Factory {    public Operation action();}

工厂具体实现:

public class AddFactory implements  Factory {    @Override    public Operation action() {        return new AddOperation();    }}

public class SubFactory implements  Factory {    @Override    public Operation action() {        return new SubOperation();    }}

运行:

public class Test {    public static void main(String[] args){        Factory add = new AddFactory();        Operation operation = add.action();        operation.operate();        Factory sub = new SubFactory();        operation = sub.action();        operation.operate();    }}

结果:

加法
减法


优点:

符合开放-封闭原则;

减少了扩展的代码修改量;

缺点:

增加了代码的增量,每次添加一个方法,都要比简单工厂多增加一个工厂实体类;


优化:利用java的反射机制

工厂接口:

public interface FactoryOptimize {    public <T extends Operation> T action(Class<T> c);}


工厂具体实现:

public class ConcreteFactory implements  FactoryOptimize {    @Override    public <T extends Operation> T action(Class<T> c) {        T operation = null;        try {            operation = (T)Class.forName(c.getName()).newInstance();        } catch (InstantiationException e) {            e.printStackTrace();        } catch (IllegalAccessException e) {            e.printStackTrace();        } catch (ClassNotFoundException e) {            e.printStackTrace();        }        return  operation;    }}

运行:

public class Test {    public static void main(String[] args){        ConcreteFactory factory = new ConcreteFactory();        Operation operation   = factory.action(AddOperation.class);        operation.operate();    }}


结果:

加法


这样就不用每次都增加工厂具体实现类




0 0
原创粉丝点击