优先考虑以来注入来引用资源

引言

有许多类在应用时会依赖一个或多个底层资源。比如说,一个拼写检查器,它检查单词拼写时需要依赖辞典,因此初学者很可能将这个字典定义为一个static final的类对象:

class SpellChecker {
    private static final Lexicon dictionary = . . .;
    
    private SpellChecker() {}
    
    public static boolean isValid(String word) { . . . }
}

但是这样的方法有一个明显的局限,就是dictionary作为检查拼写的依赖,它是被写死的,固定死的一个常量,在依赖固定,且数量较少时我们可以使用这种手段。

但我们是否有一个好的方法可以让这个类支持大量依赖,甚至是动态的依赖?

解决方案

class SpellChecker {
    private final Lexicon dictionary;
    
    private SpellChecker(Lexicon dictionary) {
        this.dictionary = Objects.requireNonNull(dictionary);
    }
    
    public static boolean isValid(String word) { . . . }
}

将dictionary设置成私有成员,而不是一个静态的类成员,并给定一个构造方法去设定dictionary的具体内容,这样就可以实现动态特性,我们可以根据具体的dictionary构造特定的SpellChecker去实现指定规则的检查,而不是像引言里的情况一下将字典从代码层面写死。

那加入我们的依赖有很多,我们则可以将dictionary设置成一个工厂类,本文不对工厂类的相关内容做进一步解释。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值