设计模式之面向对象编程(OOP)

面向对象编程的三大要素:

1.封装
所谓封装,也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏
2.继承
继承是指这样一种能力:它可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展。广义继承包含了类继承以及接口继承
3.多态
所谓多态就是指一个类实例的相同方法在不同情形有不同表现形式。多态机制使具有不同内部结构的对象可以共享相同的外部接口。

类或模块的关系(高内聚低耦合)

1.继承

继承是一种高内聚紧耦合的关联关系,即基类的任何更改,子类也可能会因为继承跟着修改。使用继承需要考虑children和parent是is的关系,同时子类是否需要用到基类所有被继承的接口。

2.实现

实现又叫接口继承,是指子类仅使用接口的属性以及方法的定义,并需提供方法的具体实现。接口继承也是一种高内聚紧耦合的关联管理,一旦接口发生改变,所有实现它的类都需要跟着修改。

3.聚合/组合

聚合/组合是一种低内聚松耦合的关联关系,表现在类的关联是has-a的关系,比如上图中计算机包含键盘鼠标,人有心肺等器官。
聚合和组合的区别:
1)聚合:整体和部分的弱关联关系,整体和部分可以单独的存在,不存在生命周期的问题(上图中的左半图)

public class  Computer{
  private Keyboard mKeyboard;
  private Mouse mMouse;
  public Computer(Keyboard k,Mouse m){
    mKeyboard = k;
    mMouse = m;
  }       
}

2)组合:整体和部分的强关联关系,部分的构建依赖于整体的构建,或者整体消亡了,部分也随之消亡。(上图中的右半图)

public class  Person{
  private Heart mHeart;
  private Lung mLung;
  public Person(){
    mHeart = new Heart();
    mLung = new Lung();
  }       
 public void onDestroy(){
    mHeart = null;
    mLung = null;
}
}

4.关联
在这里插入图片描述
聚合/组合也是一种关联,特指has-a的关系,这里的关联指的是”use-a“的广义关联关系。关联关系的指向可以是单向的,也可以是双向的,如上图中左图部分,人使用某种工具做某件事情是单向的,而右图部分,客户和订单是1:n的关联关系。

public class  Person{
  private Tool mTool;
  public Person(Tool tool){
    mTool = tool;
  }       
  public void doAction(){
    mTool.action();
  }
}

5.依赖
图略: 关联中左图Person指向Tool的实线变虚线。
依赖是一种比较弱的耦合关系,类或对象之间没有具体的引用关系,它在代码中表现为局部变量,静态调用等,下面改造关联部分代码进行比较。

public class  Person{
  //private Tool mTool;  (没有引用关联)    
  public void doAction(Tool tool){
    tool.action();  //注入方式调用
  }
  public void doAction2(){
    Tool tool = new Tool();   //内部局部调用
    tool.action();
  }
   public void doAction3(){
    Tool.action();   //类静态方法调用
  }
}

6.总结
1.引用关系强弱
(继承>=实现) > (组合>=聚合>=关联) > (依赖)
2.关系分类:
个人理解:按照上面圆括号范围划分,可以大致分为3大类,细分为6小类。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值