HEAD FIRST设计模式(一)————设计模式入门

本文介绍了设计模式中的鸭子概念,并通过Java和C++代码示例展示了如何运用设计原则,如找出可变部分、针对接口编程和多用组合少用继承。作者探讨了如何在不同语言中实现接口和多态,以及内存管理的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    最近开始看设计模式,找个一本入门的书,就是这本《HEAD FIRST设计模式》,这本书中的示例是用java写的,本以为没有任何java基础会看着相当费劲,但是这本书只用了很简单的java语言就将明白了,小白也能理解书中的代码。文中内容和图片大多来自于书本还有些个人理解,如有不正确的还请指出。

一、设计一个鸭子

    书中是从一个鸭子开始引入设计模式,这里咱们也从鸭子开始。如何设计一个鸭子,作为一名踩在门槛上还没入门的程序员,如何描述鸭子,或者说如何描述一个对象,我这里的对对象的理解就是,对象是具有某些属性和行为东西。那鸭子具有哪些属性和行为呢,鸭子的属性有颜色,有大小,有体重,鸭子的行为有会飞、会叫等等。这样我们就可以写一个超类(superclass),包括鸭子的属性、行为,然后每个具体的对象实现这些属性,从而变成一个真正的鸭子实例。

像书中这个图,我们设计了会叫会游泳的鸭子。这样我们就完成了对鸭子的设计。然而世间万物都在改变,代码和需求也是一样,所以,我们的代码也要不断改变,既然这样,面向对象的编程不仅要实现一个对象,还要考虑未来对象不断的变化,我们的代码能跟着对象的改变而维护。

    那看看设计鸭子公司如何改变鸭子的,公司说:“我们要改变!我们要创新!我们要做大做强再创辉煌!所以我们的鸭子要会飞!”程序员看了,一脸吃屎的表情,哪这么多需求。但是该改还得改,不就是会飞的鸭子吗,在超类中加个fly行为就OK了。改完之后去展示效果,结果你看到公司的所有鸭子都在飞。包括那个橡皮鸭子,在老板面前飞来飞去,你感觉自己工作不保。得改代码,不能让所有的鸭子都飞,橡皮鸭子不能飞。那就在橡皮鸭的具体实现类中重写父类的fly行为,让他不会飞,小问题。过几天,策划想出来一个诱饵鸭,诱饵鸭不会飞也不会叫,过了几天策划想的东西越来越抽象,什么奥特曼鸭子,会飞还会发激光,什么小米鸭子,会模仿小爱同学说话还能和小米汽车蓝牙连接。这什么鬼?每多一个鸭子行为,就要在超类中添加,然后在子类中覆写这些函数。这累死也搞不完,我们又得改变代码逻辑。

    于是我们把代码结构改成这样

我们把所有鸭子共有的行为剥离出来,放在一个超类中,而特殊的行为都拿出来,放在一边,把那些具有特殊行为的鸭子继承不同的特殊行为。这实际上已经引出了设计模式第一个原则

设计原则一:找出应用中可能需要变化的之处,把它们独立出来,不要和那些不需要变化的代码混在一起。

    然而上面结构依然存在一个问题,那就是,java不能多继承,所以除了Duck这个类,其他的都是接口对象,而java中接口对象不具有实现代码,所以,这和C++有什么关系呢,C++可以多继承,C++也没有接口这个特殊对象,所有对象都一样。今天不是要讨论语言,而是,这种变化量与不变量分离的思想给我们带来了新的思考:不变的部分是对象共有的,通过一个超类实现昂,并由所有对象继承,而变化的部分是未来需要拓展的ÿ

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值