设计原则之接口隔离原则

tip: 需要《设计模式之禅》的书籍,可以联系我

作为程序员一定学习编程之道,一定要对代码的编写有追求,不能实现就完事了。我们应该让自己写的代码更加优雅,即使这会费时费力。

相关规则:

推荐:体系化学习Java(Java面试专题)

1.6大设计规则-迪米特法则
2.6大设计原则-里氏替换原则
3.6大设计规则-开闭原则
4.6大设计规则-单一职责原则
5.6大设计规则-依赖倒置原则

文章目录

接口隔离原则

接口隔离原则,在《设计模式之禅》的第四章中介绍,但是文章开头并没有直接介绍这个原则的定义,可能因为不好描述吧。而是总结了这个原则的一些特性:

1、保证接口的纯洁性,接口要尽量小
2、接口的设计要高内聚,但是功能职责要单一

这两点怎么理解呢,我们举个例子:

我早上起床,第一件事是先运动,第二件事是洗漱,第三件是吃饭,第四件事是开车上班。那么这个四件事如果放在一个类里面呢,那么就不满于单一职责的原则了,而且接口力度不够细。
那么怎么利用接口隔离原则优化呢?如下例子。

我们通过行程类 Schedule 将事件全部串起来,每个事件都是从特定的接口实现来的,每件事他都发生在它应该发生的地方,这样写才符合接口隔离且单一职责的原则。
Schedule schedule = new Schedule();
schedule.sport();
schedule.wash();
schedule.eat();
schedule.drive();

package com.pany.camp.design.principle.quarantine;

/**
 *
 * @description:  客厅
 * @copyright: @Copyright (c) 2022
 * @company: Aiocloud
 * @author: pany
 * @version: 1.0.0
 * @createTime: 2023-05-31 21:33
 */
public interface LivingRoom {

    /**
     * 在客厅运动
     *
     * @since 1.0.0
     * @param
     * @return: void
     * @author: pany
     * @version: 1.0.0
     * @createTime: 2023-05-31 21:33
     */
    void sport();
}

package com.pany.camp.design.principle.quarantine;

/**
 *
 * @description: 厕所
 * @copyright: @Copyright (c) 2022
 * @company: Aiocloud
 * @author: pany
 * @version: 1.0.0
 * @createTime: 2023-05-31 21:34
 */
public interface Toilet {

    /**
     * 在厕所洗漱
     *
     * @since 1.0.0
     * @param
     * @return: void
     * @author: pany
     * @version: 1.0.0
     * @createTime: 2023-05-31 21:34
     */
    void wash();
}

package com.pany.camp.design.principle.quarantine;

/**
 *
 * @description:  餐桌
 * @copyright: @Copyright (c) 2022
 * @company: Aiocloud
 * @author: pany
 * @version: 1.0.0
 * @createTime: 2023-05-31 21:35
 */
public interface DiningTable {

    /**
     * 餐桌上吃饭
     *
     * @since 1.0.0
     * @param
     * @return: void
     * @author: pany
     * @version: 1.0.0
     * @createTime: 2023-05-31 21:35
     */
    void eat();
}

package com.pany.camp.design.principle.quarantine;

/**
 *
 * @description:  车
 * @copyright: @Copyright (c) 2022
 * @company: Aiocloud
 * @author: pany
 * @version: 1.0.0
 * @createTime: 2023-05-31 21:35
 */
public interface Car {

    /**
     * 开车上班
     *
     * @since 1.0.0
     * @param
     * @return: void
     * @author: pany
     * @version: 1.0.0
     * @createTime: 2023-05-31 21:36
     */
    void drive();
}

package com.pany.camp.design.principle.quarantine;

/**
 *
 * @description: 行程安排
 * @copyright: @Copyright (c) 2022
 * @company: Aiocloud
 * @author: pany
 * @version: 1.0.0
 * @createTime: 2023-05-31 21:37
 */
public class Schedule implements LivingRoom, Toilet, DiningTable, Car {

    @Override
    public void sport() {
        System.out.printf("sport");
    }

    @Override
    public void wash() {
        System.out.printf("wash");
    }

    @Override
    public void eat() {
        System.out.printf("eat");
    }

    @Override
    public void drive() {
        System.out.println("drive");
    }
}

package com.pany.camp.design.principle.quarantine;

public class User {

    public static void main(String[] args) {
        Schedule schedule = new Schedule();
        schedule.sport();
        schedule.wash();
        schedule.eat();
        schedule.drive();
    }
}

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

激流丶

感觉小弟写的不错,给点鼓励

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值