ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2022-06-02 11:05:19  阅读:180  来源: 互联网

标签:Manufacturer 米特 法则 buyers 接口 Buyers 设计模式 public manufacturer


一、原则:

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

二、作用:

  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();
    }
}

  效果:

 

 

 

  

标签:Manufacturer,米特,法则,buyers,接口,Buyers,设计模式,public,manufacturer
来源: https://www.cnblogs.com/catxx/p/16261908.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有