软构学习心得:委托delegation

在lab3实验报告撰写中我写到:

复习时看到一句话"委托发生在对象层面,通过接口实现"

联想到实验报告中我的表述,感觉很是混乱。

后来再次阅读ppt并查阅相关资料,大致明白了其含义。

参考文章链接如下:

https://www.runoob.com/w3cnote/delegate-mode.html

https://www.runoob.com/design-pattern/adapter-pattern.html

对于委托,可以分为三种:

(其中第三种可以看为第二种的两种具体形态)

 ​​一.Dependency(临时性的委托,A use B) 

其中Duck委托Flyable f实现fly,但是仅在参数中出现,甚至都没实例化,仅仅是用use用了一下,建立了临时性的委托。

二. Association(A has B)

 一个类有另一个作为属性/实例变量(注意与第一个的区别),但是彼此仍可区分。

二.(1) Compositon(B is part of A)   Association的强形态

(个人认为将其看作Association的强形态更易于理解也比较合理)

现在委托的B已经成为A的一部分属性,彼此不可区分,在内部创建

二.(2)Aggregation(A has B)   Association的弱形态

(个人认为将其看作Association的弱形态更易于理解也比较合理)

注意,此时B是由外部创建作为参数传入A的,彼此之间可以区分 

下面看一个例子区分一下:

其中,二者内部均有private HttpListener listener的委托,但第一个的listener是在外部创建传入WebServer的,可以动态变化,属于弱形态Aggregation, 第二个则是在其内部创建成为他的属性,属于强形态Composition

而对于最初的委托发生在对象层面,通过接口实现是什么意思呢?

是因为使用委托而不是继承,主要问题在于每个对象的具体方法不同,而不是类之间的不同。

个人理解为:这句话中的对象层面,通过接口实现,仅仅是区别于委托类之间的继承,而通过接口实现,并不是指上述类之间的委托没有通过接口实现不算委托,而是代表一种更普适的实现方法(但也是通过接口implement到具体类),看下面两个例子:

其中,委托是通过接口I i实现的,只不过被implement为了具体类A,通过接口实现的方法更为普适,比如在适配器中:

我们有一个 MediaPlayer 接口和一个实现了 MediaPlayer 接口的实体类 AudioPlayer。默认情况下,AudioPlayer 可以播放 mp3 格式的音频文件。我们还有另一个接口 AdvancedMediaPlayer 和实现了 AdvancedMediaPlayer 接口的实体类。该类可以播放 vlc 和 mp4 格式的文件。我们想要让 AudioPlayer 播放其他格式的音频文件。为了实现这个功能,我们需要创建一个实现了 MediaPlayer 接口的适配器类 MediaAdapter,并使用 AdvancedMediaPlayer 对象来播放所需的格式。AudioPlayer 使用适配器类 MediaAdapter 传递所需的音频类型,不需要知道能播放所需格式音频的实际类。AdapterPatternDemo 类使用 AudioPlayer 类来播放各种格式。

其中适配器MediaPlayer就是通过接口AdvancedMediaPlayer实现的,对于传入的音频格式选择具体类VlcPlayer还是MP4Player,否则,需要在适配器MediaPlayer内部委托多个类(VlcPlayer与MP4Player)才可以实现同样的功能。

通过接口实现委托:

1.使用接口定义系统必须对外展示的不同侧面行为;

2.接口之间可以通过extends实现行为扩展;

3.类通过implements可以组合使用接口;

4.规避了复杂的继承关系,也让委托做到类型安全并且更加灵活。

以上仅是个人在软构学习过程中的心得与体会,如有错误欢迎及时指正!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
校园悬赏任务平台对字典管理、论坛管理、任务资讯任务资讯公告管理、接取用户管理、任务管理、任务咨询管理、任务收藏管理、任务评价管理、任务订单管理、发布用户管理、管理员管理等进行集中化处理。经过前面自己查阅的网络知识,加上自己在学校课堂上学习的知识,决定开发系统选择小程序模式这种高效率的模式完成系统功能开发。这种模式让操作员基于浏览器的方式进行网站访问,采用的主流的Java语言这种面向对象的语言进行校园悬赏任务平台程序的开发,在数据库的选择上面,选择功能强大的Mysql数据库进行数据的存放操作。校园悬赏任务平台的开发让用户查看任务信息变得容易,让管理员高效管理任务信息。 校园悬赏任务平台具有管理员角色,用户角色,这几个操作权限。 校园悬赏任务平台针对管理员设置的功能有:添加并管理各种类型信息,管理用户账户信息,管理任务信息,管理任务资讯公告信息等内容。 校园悬赏任务平台针对用户设置的功能有:查看并修改个人信息,查看任务信息,查看任务资讯公告信息等内容。 系统登录功能是程序必不可少的功能,在登录页面必填的数据有两项,一项就是账号,另一项数据就是密码,当管理员正确填写并提交这二者数据之后,管理员就可以进入系统后台功能操作区。项目管理页面提供的功能操作有:查看任务,删除任务操作,新增任务操作,修改任务操作。任务资讯公告信息管理页面提供的功能操作有:新增任务资讯公告,修改任务资讯公告,删除任务资讯公告操作。任务资讯公告类型管理页面显示所有任务资讯公告类型,在此页面既可以让管理员添加新的任务资讯公告信息类型,也能对已有的任务资讯公告类型信息执行编辑更新,失效的任务资讯公告类型信息也能让管理员快速删除。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值