Java真的不难(三十九)设计模式的六大原则(3)

设计模式的六大原则(3)

设计模式的六大原则还有最后的两个原则,将在这篇文章介绍啦!!

1、接口隔离原则(Interface Segregation Principle)

接口隔离原则的定义:

要求程序员尽量将庞大臃肿的接口拆分成更小的和更具体的接口,让接口中只包含客户感兴趣的方法

小应学长自己的理解:

就是要为各个类建立它们需要的专用接口,不要去建立一个很庞大的接口供所有依赖它的类去调用。就是多写的接口,每个接口的功能明确

其实接口隔离原则和单一职责都是为了提高类的内聚性、降低它们之间的耦合性,体现了封装的思想,但两者是不同的:

  • 单一职责原则注重的是职责,而接口隔离原则注重的是对接口依赖的隔离
  • 单一职责原则主要是约束类,它针对的是程序中的实现和细节;接口隔离原则主要约束接口,主要针对抽象和程序整体框架的构建

接口隔离原则的优点:

  1. 将臃肿庞大的接口分解为多个粒度小的接口,提高系统的灵活性和可维护性
  2. 接口隔离提高了系统的内聚性,减少了对外交互,降低了系统的耦合性
  3. 如果接口的粒度大小定义合理,能够保证系统的稳定性;但是,如果定义过小,则会造成接口数量过多,使设计复杂化;如果定义太大,灵活性降低,无法提供定制服务,给整体项目带来无法预料的风险
  4. 使用多个专门的接口还能够体现对象的层次,因为可以通过接口的继承,实现对总接口的定义
  5. 能减少项目工程中的代码冗余。过大的大接口里面通常放置许多不用的方法,当实现这个接口的时候,被迫设计冗余的代码

接口隔离原则的实现方法:

  • 接口尽量小,但是要有限度。一个接口只服务于一个子模块或业务逻辑
  • 为依赖接口的类定制服务。只提供调用者需要的方法,屏蔽不需要的方法
  • 了解环境,拒绝盲从。每个项目或产品都有选定的环境因素,环境不同,接口拆分的标准就不同深入了解业务逻辑
  • 提高内聚,减少对外交互。使接口用最少的方法去完成最多的事情

接口隔离原则的简单实现:

在不遵循这个原则的时候,是一下写法:

Person父类:

public interface Person {
    
    

    //开车
    void drive();

    //吃饭
    void eat();

    //睡觉
    void sleep();

    //跑步
    void run();
}

父亲类(继承Person类):

public class father implements Person{
    
    

    @Override
    public void drive() {
    
    
        //没有实现这个技能,因为还不会开车
    }

    @Override
    public void eat() {
    
    
        System.out.println("我是父亲,我会吃饭");
    }

    @Override
    public void sleep() {
    
    
        System.out.println("我是父亲,我会睡觉");
    }

    @Override
    public void run() {
    
    
        System.out.println("我是父亲,我会跑步");
    }
}

但是我们知道,要实现一个接口,必须重写这个接口内所以方法,但是我们不能保证实现这个接口的方法都能使用到接口内的方法,比如上面代码中的父亲还不会开车。

遵循接口隔离原则的写法:
在这里插入图片描述

会开车:

public interface PersonDrive {
    
    
    //开车
    void drive();
}

会吃饭:

public interface PersonEat {
    
    

    //吃饭
    void eat();
}

会睡觉:

public interface PersonSleep {
    
    

    //睡觉
    void sleep();
}

会跑步:

public interface PersonRun {
    
    

    //跑步
    void run();
}

父类(我会吃饭、睡觉、跑步,还不会开车):

public class father implements PersonEat,PersonRun,PersonSleep{
    
    

    @Override
    public void eat() {
    
    
        System.out.println("我是父亲,我会吃饭");
    }

    @Override
    public void sleep() {
    
    
        System.out.println("我是父亲,我会睡觉");
    }

    @Override
    public void run() {
    
    
        System.out.println("我是父亲,我会跑步");
    }
}

就是我不会开车,我就不去实现开车的接口,我会哪些就去实现对应的接口。

这也就是接口隔离原则,符合将庞大臃肿的接口拆分成更小的和更具体的接口,让接口中只包含客户感兴趣的方法

我们把一个Person接口按照每个方法拆分成多个小接口,这样在日后使用的时候更方便。


2、迪米特法则(Law of Demeter)

以下内容整理自互联网

迪米特法则的定义:

只与你的直接朋友交谈,不跟“陌生人”说话

这句话的意思是:

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

迪米特法则中的“朋友”是指: 当前对象本身、当前对象的成员对象、当前对象所创建的对象、当前对象的方法参数等,这些对象同当前对象存在关联、聚合或组合关系,可以直接访问这些对象的方法

迪米特法则的优点:

  1. 降低了类之间的耦合度,提高了模块的相对独立性
  2. 由于亲合度降低,从而提高了类的可复用率和系统的扩展性

迪米特法则的实现方法:

从迪米特法则的定义和特点可知,强调以下两点:

  1. 从依赖者的角度来说,只依赖应该依赖的对象
  2. 从被依赖者的角度说,只暴露应该暴露的方法

运用迪米特法则时要注意以下几点:

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

设计模式的六大原则的总结:

小应学长用了三篇文章介绍了六大原则,文章内有些内容也是来源于互联网,我们只有了解了每个原则的内容,这样才会在实际开发中更好的去遵循这些原则,关于如何更好的使用这些原则,这就得看个人经验啦!!

只有合理的运用各个法则,结合每个原则的优缺点,这样才会让一个程序更规范。


疯狂预告:
小应学长接下去将更新数据库的知识啦,先一起学习数据库的知识,然后和Java连接一起使用!!
大家一起期待吧!!

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/m0_57310550/article/details/124135218