在我们的新设计中,鸭子的子类将使用接口(与)所表示的行为,所以实际的“实现”不会被绑死在鸭子的子类中 。(换句话说,特定的具体行为编写在实现了
与的类中) 。
实现鸭子的行为
文章插图
这样的设计,可以让飞行和呱呱叫的动作被其他对象复用,因为这些行为已经与鸭子无关了 。
也可以新增一些行为,不会影响到已有的行为类 。
这样的设计,有了继承的“复用”好处,却没有继承所带来的包袱 。
整合鸭子的行为
关键在于,鸭子现在会将飞行和呱呱叫的动作“委托”()别人处理,而不是直接使用定义在Duck类(或子类)内的呱呱叫和飞行方法 。
做法是这样的:
①、首先,在Duck类中加入两个实例变量,分别为“,与“",声明为接口类型(而不是具体类实现类型),每个鸭子对象都会动态地设置这些变量以在运行时引用正确的行为类型(例如:、
等) 。
文章插图
②、实现();
class Duck{
//为行为接口类型声明两个引用变量,所有鸭子子类都继承他们
or;
;
(){
//展示行为
(){
//委托给行为类
.fly();
(){
//委托给行为类
.quack();
③、设定、的实例变量 。类:
{
//构造器中出现针对实现编程:正在制造一个具体的Quack实现类的实例 。
//稍后会用方法解决这个问题
(){
=new Quack();
=();
【二《Head First 设计模式》之策略】(){
.out.("I'm a realduck");
- 二、数据安全风险评估标准
- 《从点子到产品》读书笔记之产品价值和用户痛点
- 二 Elasticsearch 基础之安装
- chatgpt赋能python:Python编程:求解二元二次方程的简单方法
- 二 Android集成百度地图SDK笔记
- LwIP 之二 网络接口 netif(netif.c、ethernetif
- 陪学读书会——《点石成金》第十二章-救命!老板想要我......
- 《2021中国人工智能产业研究报告》发布,景联文助力人工智能稳步发展
- 二 【3D点云】分割算法总结
- 二手车过户3次还能买吗 二手车过户3次了还可以买吗