美文网首页
从面向接口编程和工厂模式看,设计模式究竟是如何降低耦合性的?

从面向接口编程和工厂模式看,设计模式究竟是如何降低耦合性的?

作者: M_lear | 来源:发表于2022-01-27 15:40 被阅读0次

我们都知道修改是无法避免的,我们能做的是,尽量降低修改的影响面。

设计模式的核心之一就是:把可能变化的点收敛到一起,降低修改的影响面。

面向接口编程和工厂模式搭配使用,目的就是降低变量类型修改的影响面,把变量类型的修改收敛到工厂类中。

面向接口编程:

Map<String, Integer> map;

和面向实现编程:

Hashtable<String, Integer> map;

唯一的区别就是,声明为接口类型的变量可以对应接口的任意一个实现,而面向实现编程就被限定死了依赖一个具体的实现。如果要替换实现就不得不修改所有相关变量的声明。

变量声明为接口类型后,在使用前总归需要一个具体的实现。如果这样写:

Map<String, Integer> map = new ConcurrentHashMap<>();

那还是依赖了具体的实现。
所以这个时候就需要工厂模式了(或其他创建型模式),

Map<String, Integer> map = Factory.createMap("concurrentMap");

工厂模式的具体实现可以是:

public class Factory {
    public static<K, V> Map<K, V> createMap(String name) {
        switch (name) {
            case "map":
                return new HashMap<>();
            case "sortedMap":
            case "navigableMap":
                return new TreeMap<>();
            case "concurrentMap":
                return new ConcurrentHashMap<>();
            default:
                return new ConcurrentHashMap<>();
        }
    }
}

此时如果需要替换concurrentMap的实现,只需要修改工厂方法即可。concurrentMap的所有使用方无感知,不需要修改。

这个图可以很好的表达本文所描述的内容:

依赖关系.PNG

假设类D、E是可能变化的点,未来可能会换成类F、类G啥的。
面向接口编程和工厂模式,把类A、B、C对类D、E的多对多依赖,转换为工厂类对类D、E的一对多依赖。类D、E的变化只会影响工厂类,而不会影响类A、B、C。

工厂模式相当于加了一个中间层,把多对多的依赖关系简化为多对一和一对多的依赖,像这样搞的设计模式不止工厂模式一个,贴两个图大家感受一下。

外观模式(门面模式):

门面模式.jpg

防腐层设计模式:

防腐层.png

相关文章

  • Design Pattern

    设计模式是一种可复用的面向对象编程技术 设计模式的原理:面向接口编程 设计模式的目标:降低耦合,增强灵活性 要让你...

  • 从面向接口编程和工厂模式看,设计模式究竟是如何降低耦合性的?

    我们都知道修改是无法避免的,我们能做的是,尽量降低修改的影响面。 设计模式的核心之一就是:把可能变化的点收敛到一起...

  • 设计模式——工厂模式

    工厂模式类型 1、简单工厂模式2、工厂方法模式3、抽象工厂模式 面向接口编程 面向接口编程1、每个模块负责自己的职...

  • 面向指针编程(一)

    面向对象编程,面向设计模式编程(亦即设计模式),面向接口编程,面向模板编程(亦即泛型编程),面向函数编程(亦即函数...

  • 工厂模式实战

    设计模式最重要的是解耦,(面向抽象编程,面向接口编程)简单工厂是产品的工厂,工厂方法是工厂的工厂,抽象工厂是复杂产...

  • 设计模式01--简单工厂模式(iOS)

    1、简单工厂模式简述 简单工厂模式(FACTORY),通过面向对象的封装,继承和多态来降低程序的耦合度。将一个具体...

  • 工厂模式&&策略模式

    通过面向对象的封装,继承和多态来降低程序的耦合度。下面就让我们来深入学习这个模式。 工厂模式:客户类和工厂类分开。...

  • [UGUI]Unity工程中的UI优化和坑

    1.UI管理设计模式 使用工厂模式创建window,通过UI名字索引进行动态创建,降低耦合性,至于gameobje...

  • Dagger简单使用及实现原理

    什么是依赖注入 依赖注入是一种面向对象的编程模式,它的出现是为了降低耦合性,所谓耦合就是类之间的依赖关系,所谓降低...

  • web开发中interface是否有必要

    面向对象编程的一模块就是面向接口编程,用了接口之后,降低了系统的耦合性,程序可拓展,是后期维护,代码清晰度的保证,...

网友评论

      本文标题:从面向接口编程和工厂模式看,设计模式究竟是如何降低耦合性的?

      本文链接:https://www.haomeiwen.com/subject/dxznhrtx.html