面向对象编程之接口

一、接口是什么?

        学过面向对象编程的同学,对接口肯定都很熟悉了,但是我想说的其他的东西。

        1、多继承:java中没有多继承,类可以实现多接口,上一篇文章,我也说了接口也是一个拥有一项职责的组件,所以从职责方面看,通过实现不同接口以使得实现类拥有了多重职责。

        2、协议:其实我更愿意成接口为协议,

                1、协议是由参与双方针对某个功能需求进行了共同协商,并且达成协商一致的协议。该协议定义参与双方的义务和权益。

                2、java接口:它定义了参与双方的功能名,使用方需要提供的参数,以及使用方能得到返回值,提供者实现该功能,针对接收的参数进行处理,并返回功能所需的返回值。

                3、因为一份协议存在三方,消费方、服务提供方、协议本身,其实我更愿意用:调用方、实现方,协议本身。这样会让我们的视角不再将接口与实现类看成一个整体。

二、接口的作用

        1、解耦合

                1、耦合:一个类A的定义中(以任何形式)出现了另一个类名B,那么我们称这两个类是耦合的,但是如果能在类B出现的地方用接口C替换掉,则称类A与类B解耦合.

                2、解耦的关键:真正的组件双方(使用方和提供方)需要遵循一份相同的协议,协议可以是Java接口,可以是控制层的公开方法

			// 1、协议List,功能add
				public interface List{
				
					boolean add(E e)
				}
			// 2、使用方通过接口调用的方式,启用协议的功能
				public Class Consumer {
					
					private List list;
					
					public void consume() {
						list.add()
					}
}

               3、形象描述:耦合在一起的两个组件相当于十指交叉的两只手,密不可分,解耦后变成,一只手(调用方)不变,但是另一只手(提供方)变成了握拳状。类似于调用方包裹着提供方,他们中间有一层隔离着,这样双方都能独立演变

三、接口的用法

        1、协议的解耦合

                 1、对于使用者而言,只需关注接口所暴露的服务,找出哪些适合自己需求的服务,再与之对接即可。

                 2、对于实现者而言,只需关注接口定义的身份,是否有与自身的场景存在相符的身份,如果存在则根据自身的情况去实现相应的服务功能

        2、对外它扮演的是一套层次结构的职责。或者说角色

                1、标记接口:实现该接口,实现类即可该接口带来的享受一站式服务              

例如:调用者A-杭州某旅游公司的雷峰塔旅行团, 接口B-参与旅行团的人,实现者C-想去杭州一日游的张三,景点G-被参观的景点(比如雷峰塔)
	1) 旅游团A,应该提供一个容器收集参团人信息
    2) 旅游团A,应该提供订票接口,将参与某次景点旅游活动的人员集合起来。
	3) 旅游团A, 应该提供人员集合清点接口,在需要点进行集合清点人数,打卡。
	4) 旅游团A, 应该提供买票接口,给参团集体一次性买票
	5) 旅游团A,应该提供分发景区门票接口,根据身份id
	6) 旅游团A,应该提供进出检票接口
	7) 旅游团A,应该提供导游接口,引领参团人员参观各个景点,并讲述相关历史
	8) 旅游团A, 应该提供自由活动接口,让参团人员在某地点附近可自由活动(购物,拍照,休息,上厕所等)
	9) 接口B,应该提供参团人的买票接口,提供身份id,金额,返回旅游团的活动票据
	10) 接口B,应该提供报道接口,根据身份id,返回是否报道。用于旅游团清点人数
	11) 接口B, 应该提供自由活动接口
	12) 接口B, 应该提供被导游接口,听和位置移动
	13) 接口B, 应该提供接收景点门票接口
	14) 接口B, 应该提供出示景点门票接口

        3、定义数据属性,比如在接口中定义getter/setter方法,决定其实现类中必须存在的这些属性(类型和名称)

        4、定义常量

        5、对抽象进行抽象:对抽象组件进行分析,考虑共性,能否统一起来定义成接口

        6、分离关注点,即调用方只需关心接口定义的功能,并通过接口进行交互,而无需了解具体的实现细节。而控制反转(IOC)就使用的是这一思想:调用方依赖于抽象接口(以及能提供哪些功能),而接口的实现与调用方无关,需要将实现者的创建、生命周期、依赖注入等这一部分代码抽离,交由外部容器或框架负责。、

四、面向对象编程的中级思路:

         1、理清楚业务的主要流程,写出面向过程的主要步骤。

        2、分析流程中存在哪些显而易见的角色。

        3、拆分流程,分成一个个角色,指定角色存在哪些能力。

        4、找出流程中可能会发生变化的部分,将其抽象成接口对象

        5、找出流程中的隐藏角色。

        6、将以找出的角色重新组织关系,如果角色之间的关系无法完成,需要加入新的对象维护。

    

  • 39
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值