课程《设计模式之美》笔记之关于java四大特性

课程《设计模式之美》笔记

写在前面:一句话总结
封装隐藏属性(private、public、protected)
抽象隐藏方法(implements)
继承支持复用(extends)
多态支持扩展(继承/抽象+override)

1、封装特性的意义

只暴露必要操作,调用者不需要了解背后的逻辑细节,减少错用的概率,提高类的易用性。(隐藏信息:只public 必要的操作、保护数据:private属性)

2、抽象特性的意义

隐藏了接口类的具体实现。implements
抽象其实是一种设计思想,即只暴露关键功能、隐掉实现细节,命名时也需要这种思想,不要再方法定义中,暴露太多的实现细节,以保证在某个时间点需要改变方法的实现逻辑的时候,不用去修改其定义。举个例子,getAliyunPictureUrl() 就没有getPictureUrl()好。

3、继承特性的意义

最大的好处就是代码复用,子类继承extends父类的方法属性等。假如两个类有一些相同的属性和方法,我们可以将相同的part抽取到父类,让两个子类继承父类。但不要过度使用继承,层次过深过于复杂反而会导致代码可读性变差、可维护性变差。
很多人觉得继承是反模式,少用继承?

4、多态特性的意义

子类可以替换父类(extends)
父类 x1 = new 子类();
多态需要编程语言提供特殊的语法机制来实现:首先是这个语法机制要可以支持父类对象可以应用子类对象,也就是子类可以传递给父类;其次是要支持继承,也就是子类继承了父类,才能将子类传递给父类;最后是要支持子类可重写override 父类中的方法,也就是子类重写了父类的具体方法。
这三个机制实现了多态,x1看起来是父类,实际上实际调用的方法是子类里写的。

除了继承+override可以实现多态,接口类语法implements以及duck-typing语法也可以实现。
接口类的实现其实跟继承的差不多,只是父类是个接口类,子类不是继承,是implements父类,重写接口类的接口,具体使用的时候也是具体实现类传递给接口抽象类。

duck-typing只有一些动态语言才支持。
duck-typing实现多态非常灵活,两个类不需要有任何关系,只要定义了同一个名字的方法,就可以实现传递。

多态特性提高了代码的可扩展性和复用性,去掉了冗余的if-else语句。
多态是很多设计模式、设计原则、编程技巧的实现基础。


个人思考:从前只是知道这样用能实现一个怎样的效果,没有想过存在背后的意义,以后遇到一些设计无论难度大小都应该去主动思考其存在的意义。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值