首页 > 其他分享 >面向对象的7种设计原则(6)-迪米特原则

面向对象的7种设计原则(6)-迪米特原则

时间:2022-09-20 15:55:59浏览次数:70  
标签:米特 String 原则 getName private 面向对象 public name

迪米特原则

迪米特原则(Law of Demeter)又叫最少知道原则(Least Knowledge Principle),可以简单说成:talk only to your immediate friends,只与你直接的朋友们通信,不要跟“陌生人”说话。

image

模式与意义

迪米特法则,如果两个类不必彼此直接通向,那么这两个类就不应当发生直接的相互作用。如果其中一个类需要调用另一个累哦的某一个方法的话,可以通过第三者转发这个调用。

迪米特法则首先强调的前提是在类的结构设计上,每一个类都应当降低成员的访问权限,也就是说,一个类包装好自己的private状态,不需要让别的类知道的字段或行为就不要公开。

面向对象的设计原则和面向对象的三大特性本就不是矛盾的。迪米特法则其根本思想,是强调了类之间的松耦合。类之间的耦合越弱,越有利于复用,一个处在弱耦合的类被修改,不会对有关系的类造成搏击,也就是说,信息的隐藏促进了软件的复用。

优点

减少对象之间的耦合性
image

摘自大话设计模式:
image
image
image

注意

  • 在类的划分上,应该创建弱耦合的类。类与类之间的耦合越弱,就越有利于实现可复用的目标。
  • 在类的结构设计上,尽量降低类成员的访问权限。
  • 在类的设计上,优先考虑将一个类设置成不变类。
  • 在对其他类的引用上,将引用其他对象的次数降到最低。
  • 不暴露类的属性成员,而应该提供相应的访问器(set 和 get 方法)。
  • 谨慎使用序列化(Serializable)功能

举例

明星与经纪人的关系实例

分析:明星由于全身心投入艺术,所以许多日常事务由经纪人负责处理,如与粉丝的见面会,与媒体公司的业务洽淡等。这里的经纪人是明星的朋友,而粉丝和媒体公司是陌生人,所以适合使用迪米特法则
image

public class LoDtest
{
    public static void main(String[] args)
    {
        Agent agent=new Agent();
        agent.setStar(new Star("科比"));
        agent.setFans(new Fans("闰土"));
        agent.setCompany(new Company("中国传媒有限公司"));
        agent.meeting();
        agent.business();
    }
}
//经纪人
class Agent
{
    private Star myStar;
    private Fans myFans;
    private Company myCompany;
    public void setStar(Star myStar)
    {
        this.myStar=myStar;
    }
    public void setFans(Fans myFans)
    {
        this.myFans=myFans;
    }
    public void setCompany(Company myCompany)
    {
        this.myCompany=myCompany;
    }
    public void meeting()
    {
        System.out.println(myFans.getName()+"与明星"+myStar.getName()+"见面了。");
    }
    public void business()
    {
        System.out.println(myCompany.getName()+"与明星"+myStar.getName()+"洽淡业务。");
    }
}
//明星
class Star
{
    private String name;
    Star(String name)
    {
        this.name=name;
    }
    public String getName()
    {
        return name;
    }
}
//粉丝
class Fans
{
    private String name;
    Fans(String name)
    {
        this.name=name;
    }
    public String getName()
    {
        return name;
    }
}
//媒体公司
class Company
{
    private String name;
    Company(String name)
    {
        this.name=name;
    }
    public String getName()
    {
        return name;
    }
}

标签:米特,String,原则,getName,private,面向对象,public,name
From: https://www.cnblogs.com/leepandar/p/16711320.html

相关文章

  • 面向对象的7种设计原则(5)-里氏代换原则
    定义里氏代换原则(LiskovSubstitutionPrincipleLSP)面向对象设计的基本原则之一。里氏代换原则中说,任何基类可以出现的地方,子类一定可以出现。LSP是继承复用的基石,只......
  • 面向对象---多态的基础语法
    多态的基础语法Q:什么是多态?A:多种形态,多种状态。学习多态基础语法之前,我们需要普及两个概念。注意---java中允许向上转型,也允许向下转型无论是向上转型,还是向下转型,两......
  • 面向对象
    面向对象目录面向对象面向过程&面向对象的关联面向对象本质特点三大特性面向过程&面向对象的关联​在我们真正接触面向对象之前,我们要先回顾一下什么是面向过程。面向......
  • Java面向对象数据结构完全学习教程 pdf
    高清扫描版下载链接:https://pan.baidu.com/s/1m6FOQFqsjqYSbKXKs8zHjQ点击这里获取提取码 ......
  • 设计模式---六大设计原则
    六大设计原则单一职责原则接口隔离原则开闭原则依赖倒置原则里氏代换原则迪米特法则单一职责原则我们分别看两个案例,一个是遵守单一职责原则,另一个是违背。违背......
  • Day5 java面向对象的学习
    Day5回顾方法static静态方法不加static非静态方法static是和类一起加载的类与对象的创建类是一种抽象的数据类型,是对某一事物整体的描述对象是抽象概念的具体事......
  • 面向对象编程三大特征(封装、继承和多态)
    1基本介绍面向对象编程有三大特征:封装、继承和多态。2封装介绍3封装的理解和好处4封装的实现步骤(三步)5案例不能随便查看人的年龄,工资等隐私,并对设置的年......
  • JavaScript高级复习——js面向对象
    面向对象优点:易维护、易复用、易扩展。适合多人合作。缺点:性能比面向过程低。面向过程优点:性能比面向对象高,适合跟硬件联系很紧密的东西,例如单片机。缺点:没有面向对象......
  • 面向对象---继承
    什么是继承---Extends继承:在现实世界中也是真实存在的。例如:父亲很有钱,儿子不努力也很有钱。基本语法class子类extends父类继承的作用:基本作用:子类继承父类,代码......
  • OOP面向对象的七大设计原则
     一.开闭原则 OCP(Open-ClosedPrinciple)核心思想:对扩展开发,对修改关闭。好处:可以提高代码的可复用性。可以提高代码的可维护性。 二.里氏代换原则 LSP(LiskovSub......