java string 子类_java-从字符串初始化子类对象

使用工厂,解决方案如下所示:

interface FighterFactory {

Fighter create();

}

保留Map< String,FighterFactory>外观中的变量.每种战斗机类型都必须在此地图中与其工厂一起注册.

private Map fighters;

public void register(String name, FighterFactory factory) {

fighters.put(name, factory);

}

在每种Fighter类型中都嵌入一个内部类Factory例如

class Foo extends Fighter {

//code for Foo

public static class Factory implements FighterFactory {

public Foo create() {

return new Foo();

}

}

}

// and in your Facade

register("Foo", new Foo.Factory());

要实例化新的Fighter,请进入Fighter-Map并对其结果执行create.

FighterFactory factory = fighters.get(nameFromClient);

// null handling, if nameFromClient is not a Fighter type;

return factory.create();

与反射相比,此设计具有一些优点:

>它是安全的

> create方法可以做的不仅仅是构造函数

以及单一工厂方法(一种方法可处理所有Fighter类型):

>如果create方法变得比您对代码所做的更改更复杂(例如,创建实例需要更多的参数),则位于Fighter类而非工厂方法处.

和枚举方法:

>使用的Enum的唯一功能是遍历其值.保留值映射将用映射查找替换迭代

>如何构造战斗机的信息位于战斗机附近,而不是冠军枚举

>您甚至可以确定FighterFactories是顶级类,而枚举内部类Factories则无法实现.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值