设计模式6大原则-接口隔离原则

设计模式6大原则-接口隔离原则

定义:
(1) 客户不应该依赖它不需要的接口
(2) 类间的依赖关系应该建立在最小的接口上

接口隔离原则要达到的目的就是细化接口,将臃肿的接口拆分成多个独立的接口,接口应该删除掉不需要的方法,类与类之间通过他们需要的接口建立依赖关系。

如果一个接口包含多种模块功能的方法,而且这个接口被多个模块依赖,需要对各个模块规定访问权限,规定每个模块能访问哪些方法,这样的设计是不复合接口隔离原则的,接口隔离原则要求尽量拆分成多个不同模块的接口,每个模块依赖他们需要关心的接口,从而避免一些可以访问到但是业务逻辑要求不能访问的方法。
说白了就是如果我依赖的接口或者类中的 public 方法,我都应该能访问调用它,如果不想让我访问就别向我展现这样的 public 方法。

以现实生活为例
每个人在不同场合扮演的角色是不一样的
在家里可能是个和蔼可亲的父亲
在公司是个严格的老板
在朋友面前是个真诚善良的老大哥

在家里孩子关心的角色是父亲,以及父亲的职责
在公司同事关心的角色是老板,以及老板的职责
在朋友间关心的角色是朋友,以及朋友的职责

如何设计?
如果将父亲的职责、老板的职责、朋友的职责 都封装到一个接口中,首先导致接口的臃肿,然后就是朋友能访问到老板的职责,以及父亲的职责,这是不对的,所以通过不同的职责拆分为三个接口分别是 父亲接口、老板接口、朋友接口,将不同的接口添加依赖到不同的人上。

设计类图如下
在这里插入图片描述
代码实现如下
父亲接口

    // 父亲接口
    public interface IFather
    {
        // 买礼物
        void Gift(string gift);
    }

老板接口

    // 老板接口
    public interface IBoss
    {
        // 分配任务
        void Task(string task);
    }

朋友接口

    // 朋友接口
    public interface IFriend
    {
        // 跟朋友喝酒
        void Drink();
    }

人类:实现三个接口

    // 实现不同的接口
    public class Person : IFather, IBoss, IFriend
    {
        // 买礼物
        public void Gift(string gift)
        {
            Console.WriteLine(gift);
        }

        // 分配任务
        public void Task(string task)
        {
            Console.WriteLine(task);
        }

        // 跟朋友喝酒
        public void Drink()
        {
            Console.WriteLine("跟朋友一起喝酒 \n");
        }
    }

同事类

    public class Colleague
    {
        // 依赖老板接口
        private IBoss _iBoss;

        public void SetBoss(IBoss boss)
        {
            _iBoss = boss;
        }

        public void DoAction()
        {
            _iBoss.Task("老板请给我分配任务 \n");
        }
    }

朋友类

    public class Friend
    {
        // 依赖朋友接口
        private IFriend _iFriend;

        public void SetFriend(IFriend friend)
        {
            _iFriend = friend;
        }

        public void DoAction()
        {
            _iFriend.Drink();
        }
    }

孩子类

    public class Child
    {
        private IFather _iFathre;

        public void SetFather(IFather father)
        {
            _iFathre = father;
        }

        public void DoAction()
        {
            _iFathre.Gift("我要礼物 \n");
        }
    }

代码调用如下

    public class Client
    {
        public Client()
        {
            Person person = new Person();

            Friend friend = new Friend();
            friend.SetFriend(person);
            friend.DoAction();

            Colleague colleague = new Colleague();
            colleague.SetBoss(person);
            colleague.DoAction();

            Child child = new Child();
            child.SetFather(person);
            child.DoAction();

        }
    }

运行结果如下
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值