读书笔记:Android设计模式第二章

主要围绕单例模式,但是还是有独到的东西

public class ServiceManager {

    private static Map<String, Object> serviceSingletonMap = new HashMap<>();

    public static void registerService(String serviceName, Object serviceSingleton) {

        serviceSingletonMap.put(serviceName,serviceSingleton);

    }

    //unregister...

    //getService...

}

上篇读书笔记围绕NetworkService.sendRequest(Request);来展开,其实这不是最优实现,用一个单例管理中心是最好的实现。

ServiceManager.getService("网络请求");

在原来调用服务的时候,是点对点的耦合,现在只需要耦合服务中心,服务中心来耦合所有的服务,也就是说在使用者和服务之间增加了一个服务代理,进一步解决了耦合程度。在Android中,Context就是利用的这种模式,注册了服务,开发者也可以很方便地获取服务。(伪解耦)

更优一点是这样的,ServiceManager.execServiceMethod("网络请求","sendRequest",Request);这样可以说可以送佛送到西了,根据第一章读书笔记里的迪米特原则,了解的越少越好,现在我对NerworkManager都一无所知了,原来获取服务后还要转型成NetworkService,属于伪解耦,现在这样,是真解耦。这也是一种依赖注入原则的体现,面向了接口,也就是抽象。更是 里氏替换原则的体现。

但是这样高度解耦也带来了隐患。这个方法的实现形式1是ServiceManager更深入地耦合所有的工具类,这倒无所谓,但是假如有1000个框架,10000个方法在这里注册呢,这意味着ServiceManager这个类的体积会很大,工作量大一点倒也没事,但是这么多代码在程序中占领的内存是恐怖的。实现形式2是反射,这带来了一定的性能隐患,但是只需要做好cache,method.invoke和直接调用的性能相差可以说是非常之小了,但是带来的解耦程度是惊人的。

最后ServiceManager就不需要也隐式处理了,但是可以声明接口,进行接口隔离。

猜你喜欢

转载自blog.csdn.net/qq_36523667/article/details/80873552