【设计模式】7.设计模式原则-迪米特法则

得意时要看淡,失意时要看开。不论得意失意,切莫大意;不论成功失败,切莫止步。志得意满时,需要的是淡然,给自己留一条退路;失意落魄时,需要的是泰然,给自己觅一条出路【设计模式】7.设计模式原则-迪米特法则,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

一、原则:

  如果两个软件实体无须直接通信,那么就不应当发生直接的相互调用,可以通过第三方转发该调用。其目的是降低类之间的耦合度,提高模块的相对独立性。

二、作用:

  1.降低了类之间的耦合度,提高了模块的相对独立性

  2.由于亲和度降低,从而提高了类的可复用性和系统的扩展性。

  3.过渡使用迪米特法则会使系统产生大量的中介类,从而增加系统的复杂性,使模块之间的通信效率降低。所以,在采用迪米特法则时需要反复权衡,确保高内聚和低耦合的同时,保证系统的结构清晰。

三、实现:

  1.从依赖者的角度来说,只依赖应该依赖的对象.

  2.从被依赖者的角度说,只暴露应该暴露的方法。

四、涉及到的设计模式:

  中介者模式,适配器模式

五、示例:

  1.平时遇到的需要使用迪米特法则的场景,对外有一套旧接口,对接了很多的厂家,现在系统优化,在全新的项目上开发了功能相同的一系列接口,原有的对外接口不能换掉,只能开发一套转发到新接口的功能:将旧接口的参数转化为新接口的参数发送到新的api接口上,之后将新的api接口返回的数据转换为旧接口的返回结果发送给用户。这个模式是适配器模式。

  2.买家和厂家、产品销售

  想买一个东西并不需要去生产厂商那里去拿,而是去小卖铺或者超市去购买,小卖铺或者超市就是中介者。

  代码示例:

  购买者:

@Data
public class Buyers {
    private String name;
}

  生产厂家:

@Data
public class Manufacturer {
    /**
     * 产品名称
     */
    private String productName;
}

  超市:

public class SuperMarket {
    private Manufacturer manufacturer;
    private Buyers buyers;

    public SuperMarket(Manufacturer manufacturer, Buyers buyers) {
        this.manufacturer = manufacturer;
        this.buyers = buyers;
    }

    public void sale() {
        System.out.println(buyers.getName() + "买了" + manufacturer.getProductName());
    }
}

  调用代码:

public class MainTest {
    public static void main(String[] args) {
        Buyers buyers = new Buyers();
        buyers.setName("张三");

        Manufacturer manufacturer = new Manufacturer();
        manufacturer.setProductName("薯片");
        SuperMarket superMarket = new SuperMarket(manufacturer, buyers);

        superMarket.sale();
    }
}

  效果:

【设计模式】7.设计模式原则-迪米特法则

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/158109.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!