1.任务: 给鸭子增加一个飞行的功能
方式一: 接口Duck中声明fly(),然后在子类中具体实现
弊端: 每当新增一种方法,都会影响现有的鸭子类,
方法二: 将变化的,非共性的功能抽取出来,用接口来实现,需要哪个功能就实现哪个接口
弊端:代码无法复用,每个集成Flyable的类都要重写一遍fly()方法
方法三: 用委托的办法,创建一个飞行行为接口FlyBehavior,然后用不同的类来实现fly()方法
任何类想要具有飞行的功能,只要拥有FlyBehavior成员变量,然后创建FlyBehavior的子类对象就可了以
Duck类中有FlyBehavior成员变量
MallardDuck继承Duck,所以也有FlyBehavior成员变量,调用performFly()方法就能执行具体对象的方法了
总结:用接口的方式,本质上是将功能解耦,编程一个个单一的对象,然后按需组合成你需要的对象,这种方式有更高的扩展性
用继承的方式,其实是对功能进行了限制,比如在超类中定义fly(),只有Duck的子类可以实现这个方法,其他动物需要重新在超类中再声明一次fly()。
原则: 把变化的部分取出并封装起来,好让其它部分不会受到影响。
相关推荐
使用c++实现的委托模式源代码,供学习设计模式参考使用
关于委托模式详细讲解(委托),主要举例说明..
Struts+DAO+工厂模式+委托模式+值对象模式!
IOS 设计模式委托模式实例Demo 设计 模式 IOS 代理 委托
声明一个struct,跟C很一样,然后直接把这个struct类型放到另一个struct里。委托的简单示例我们来看几个示例:type Widget sruct {
Cocoa Touch框架下使用大量使用委托(delegation),根据苹果公司的文档,delegate是Cocoa Touch框架所采用的委托模式的一种形式。例子实现一个自己构建的类似于UIButton功能的组件。
iPhone源码分析(委托模式) 详细介绍了委托模式的原理 通过实例讲解,一目了然
IOS 委托模式KVO实例Demp IOS 设计 模式 委托 KVO
java类加载器学习三、类加载器的委托模式
建设工程监理委托模式实施程序.ppt
建设工程监理委托模式与实施程序.ppt
建设工程监理委托模式与实施程序PPT学习教案.pptx
论大股东控制下的上市公司独立审计委托模式.pdf
美国广播电视体制_公众委托模式_的形成机制[文].pdf
php设计模式 Delegation 委托模式示例代码,需要的朋友可以参考下。
很简单的代码, 以委托方式进行窗体间消息传递,可以同时发送给多个窗体(多播委托)
委托模式是软件设计模式中的一项基本技巧。在委托模式中,有两个对象参与处理同一个请求,接受请求的对象将请求委托给另一个对象来处理。委托模式是一项基本技巧,许多其他的模式,如状态模式、策略模式、访问者模式...
NULL 博文链接:https://lgstarzkhl.iteye.com/blog/606242
委托模式是软件设计模式中的一项基本技巧。在委托模式中,有两个对象参与处理同一个请求,接受请求的对象将请求委托给另一个对象来处理。委托模式是一项基本技巧,许多其他的模式,如状态模式、策略模式、访问者模式...
委托模式: 通过分配或委托至其他对象,委托设计模式能够去除核心对象中的判决和复杂的功能性。 class Bank{ protected $info; /* 设置基本信息 @param string $type 类型。例如"RMB" @param int $money 利率...