zoukankan      html  css  js  c++  java
  • 设计模式学习笔记(4)-接口和抽象类

    接口和抽象类的区别

    • 抽象类不能被实例化,只能被继承
    • 抽象类可以包含属性和方法,方法既可以包括代码实现,也可以不包含代码实现(抽象方法)
    • 子类继承抽象类,必须实现抽象类的所有方法
    • 接口不能包含属性
    • 接口只能声明方法,不包括代码实现
    • 类实现接口,必须实现接口中所有的方法

    抽象类和接口的意义

    抽象类是对成员变量和方法的抽象,是一种is-a 关系,是为了解决代码复用问题,接口仅仅是方法的抽象,是一种has-a 关系,表示具有某种行为特性,是为了解决解耦问题,

    如何决定使用抽象类还是接口

    • 解决代码复用,并且是 is-a 关系 使用抽象类
    • 解决抽象而非代码复用,且是has-a 关系,使用接口

    基于接口(抽象)而非实现编程

    越抽象,越脱离具体某一细节的设计,越能提高代码的灵活性,越能应对未来的需求变化

    1. 函数命名要具有抽象思维,不要暴露实现细节
    2. 封装具体的实现细节
    3. 为实现类定义抽象的接口,具体的实现类都依赖统一的接口定义,遵从一致的协议,调用者依赖接口而不是实现类
    4. 避免过度使用抽象,尊从设计初衷,接口实现分离,封装不稳定的实现,暴露稳定的接口,即给调用者使用的代码要稳定

    少用继承,多用组合

    • 继承层次加深,导致代码可读性变差,因为要搞清楚某个类的属性方法,要不断的查看父类代码。另一方面破坏封装性,将父类的实现细节暴露给子类,造成两者高度耦合
    • 使用组合、接口、委托三个技术手段解决上诉问题

    附上大牛课程,需要可以直接去学习

    http://gk.link/a/10fWa

    金钱和自由相比,不值一提
  • 相关阅读:
    [恢]hdu 1548
    [恢]hdu 2102
    [恢]hdu 1238
    [恢]hdu 2564
    [恢]hdu 2565
    关于mmu,bootloader,dta以及各种乱七八糟
    总有那些让人XX的词语
    VS2005+SQL2005 Reporting Service动态绑定报表(Web)
    (已测试)在本地处理模式下将数据库数据源与 ReportViewer Web 服务器控件一起使用
    如何在单台计算机上安装 Reporting Services
  • 原文地址:https://www.cnblogs.com/roadzhao/p/12301896.html
Copyright © 2011-2022 走看看