暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

初识设计模式 | 鸭子的故事

数据与共享 2018-06-12
1023

说起鸭子,小编想起了某黑鸭那句鸭子很忙的广告词,我想大家面对鸭子和我的感觉一样:鸭子会呱呱叫,鸭子会飞,有白鸭子,黑鸭子,考鸭子,卤鸭子。总之鸭子的种类很多,面对如此多的鸭子,我们该如何用面向对象的思想的进行描述呢?



01

鸭子都会游泳呱呱叫


抽象类:Duck

子类:RedDuck

子类:GreenDuck

测试类:Test

运行结果:

 



02


橡皮鸭不会飞且吱吱叫


新需求:有人认为鸭子应该会飞,小编心想这个简单,在超类Duck中增加一个fly()方法,所有继承超类(Duck)的子类鸭子都将拥有飞的方法,妙哉!

测试结果:Test

问题:橡皮鸭吱吱叫,而且橡皮鸭不会飞!!!

解决:橡皮鸭子类(RubberDuck)重写fly和quack方法。

测试类:Test

结果:

总结:暂时性的解决了橡皮鸭不会飞、吱吱叫的问题。但是产生了许多无用且重复的代码(fly方法的)。并且如果再添加一种鸭子-烤鸭,其不会飞也不会叫更不会游泳,则要多更多地方法进行重新覆盖。



03


引入接口


解决方法:没啥大不了的,将quack、fly、swim方法抽象到不同的接口中,超类(duck)中只保留display方法,不同的鸭子都继承超类并重写display方法,但是不同的鸭子对接口选择性的实现。

问题:真是一波未平,又起一波。问题看似完美解决,但是如果有1000种鸭子,就得写1000个实现类,代码不能复用,这可真是累死宝宝啦!所以我们得继续研究解决之道。



说明:下一节将正式引入设计模式,我们一起探索,如何通过设计模式使代码的利用率提高,如何隐藏具体的实现细节,如何把变化的部分进行抽取封装,以便容易改动和扩充,而不对其他部分产生影响。



文章转载自数据与共享,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论