HeadFirst设计模式入门(四)
来源:互联网 发布:小学生读英语软件下载 编辑:程序博客网 时间:2024/06/05 17:09
这里我们使用动态设定的方法来指定鸭子子类的行为,而不是在构造函数中通过实例化指定。
添加两个方法:
类图为:
代码为:
public void setFlyBehavior(FlyBehavior fb)
{
flyBehavior = fb;
}
public void setQuackBehavior(QuackBehavior qb)
{
quackBehavior = qb;
}
添加一个Duck的子类ModelDuck类
类图为:
代码为:
class ModelDuck:Duck
{
public override void display()
{
Console.WriteLine("我显示为模型鸭");
}
}
测试类:
#region 测试红头鸭
Duck mld = new ModelDuck();
mld.display();
mld.setFlyBehavior(new FlyWithWings());
mld.performFly();
#endregion
此时,在运行时指定ModelDuck是可以飞的。
显示为:
此时,我需要一个不能飞的模型鸭,就不必修改ModelDuck类的代码,而只需修改一处代码
Duck mld = new ModelDuck();
mld.display();
mld.setFlyBehavior(new FlyNoWay());
mld.performFly();
#endregion
Console.ReadKey();
显示为:
到此,我们已经完善了整个程序的设计,使得程序的扩展性和重用性都更好.
(2)在超类中,声明共有的字段,其类型为刚刚抽象的接口类型
(3)在子类中的构造函数中,根据需要,将行为类实例的引用赋给刚刚声明的共有字段,此时确定子类所具有的具体行为(实现代码的灵活性)
(4)替代(3)在超类中,针对每类行为提供一个方法,使得在运行时确定子类所具有的具体行为(最大化代码的灵活性)
- HeadFirst设计模式入门(四)
- HeadFirst设计模式入门(一)
- HeadFirst设计模式入门(二)
- HeadFirst设计模式入门(三)
- 【设计模式】HeadFirst设计模式(四):工厂模式
- HeadFirst 设计模式笔记(四)—— 工厂模式
- HeadFirst 设计模式笔记(四)—— 工厂模式
- HeadFirst设计模式
- HeadFirst -------- 设计模式要点
- Headfirst设计模式 整理
- HeadFirst 设计模式 总
- HeadFirst设计模式
- HeadFirst 设计模式 笔记
- Headfirst-设计模式
- HeadFirst设计模式 读书笔记
- HeadFirst设计模式 读书笔记
- 读headFirst设计模式
- 读书笔记:《HeadFirst设计模式》
- 关于Lazy Load
- yyyy-mm-dd hh:mm:ss的正则表达式
- GridView中的数据导出到Excel方法(包含处理模板列)
- Nginx 0.7.x + PHP 5.2.6(FastCGI)搭建胜过Apache十倍的Web服务器(第4版)
- BW十日谈之增强数据源
- HeadFirst设计模式入门(四)
- Struts1.2中actionForm使用索引:ArrayList改用HashMap,避免错乱顺序
- 在程序中实现关联指定的文件类型
- 在客戶端設置控件的顯示/隱藏
- 字符,字节和编码(乱码的产生)
- js访问
- 使用 Nginx 提升网站访问速度
- 图片处理(图片缩小,图片剪辑)
- 用open和showModalDialog打開新網頁的區別