【Head First】类图关系与代码对应(Java)

来源:互联网 发布:网络应急指挥体系 编辑:程序博客网 时间:2024/06/05 07:59


亲!

         最看Head First设计模式、深感比大话设计模式更深、当初感觉策略与工厂结合特别不爽、因为还要改工厂、这次直接用接口选择、不修改、只扩展、呼呼、听说有好多人看这个有难度、其实我看也有很多迷糊的、也许是因为与大话设角度的问题吧、这次从新总结了类图之间的关系、重在代码、是什么的知识就不讲了。


关系强度从弱到强:

             依赖关系(Dependency)---关联关系(Association)---聚合(Aggregation)---组合(Composition)---泛化(Generalization)


关系与代码对应:


继承

<span style="font-size:18px;">Public class Father{//父亲类}Public class son extends Father{//儿子类继承父亲类}</span>

实现接口

<span style="font-size:18px;">//买手机接口Public interface BuyIPhone{//买手机方法Public void Buy();} Public class Father{//父亲类实现买手机方法Public void Buy(){//买手机代码略};}</span>


依赖

          依赖关系放到代码中就是在方法中声明或使用别的类、或者传入一个类的实例。

<span style="font-size:18px;">Public class IPhone{//具体方法略}//1、方法中声明或newPublic class chen{Public void Usephone(){IPhone chenphone;//声明IPhone chenphone = new IPhone();//New了一个手机的对象 };}//2、当做方法的参数Public class chen{Public void Usephone(IPhone chenphone){//实现略};}</span>


关联(有一个)


              这个与关联蛮像的、但是这个声明是在类里的、而不是某个方法。


<span style="font-size:18px;">//依赖的声明和NEW是在方法外面的Public class chen{IPhone chenphone;//声明IPhone chenphone = new IPhone();//New了一个手机的对象Public void Usephone(){ };}</span>

关联和依赖的区别:


  • 从类的属性是否增加的角度看:

                             发生依赖关系的两个类都不会增加属性。其中的一个类作为另一个类的方法的参数或者返回值,或者是某个方法的变量而已。

                              发生关联关系的两个类,其中的一个类成为另一个类的属性,而属性是一种更为紧密的耦合,更为长久的持有关系。


  • 从关系的生命周期来看:

                          依赖关系是仅当类的方法被调用时而产生,伴随着方法的结束而结束了。

                          关联关系是当类实例化的时候即产生,当类销毁的时候,关系结束。相比依赖讲,关联关系的生存期更长。

组合

B类构造时候、在自身类中NEW了一个A对象、B对象释放、A对象随之释放。

<span style="font-size:18px;">Publicclass Bird{<span style="white-space:pre"></span>Public Wing wing;<span style="white-space:pre"></span>Public void Bird(){<span style="white-space:pre"></span>wing =new Wing;<span style="white-space:pre"></span>};}</span>

鸟没了翅膀也没法活。



聚合

B类构造时从类外传进一个对象AB对象释放、A对象还在外面没释放。

<span style="font-size:18px;">Publicclass BirdGroup{<span style="white-space:pre"></span>Public  Bird bird;<span style="white-space:pre"></span>Public void BirdGroup(Bird b){<span style="white-space:pre"></span>bird =b;<span style="white-space:pre"></span>};}</span>

鸟群没了、鸟照样活。

 

设计原则

页数

原则

9

找出变化的、把他们独立,不和不需要变化的混在一起

11

针对接口编程、而不针对实现编程。

23

多用组合、少用继承

53

为交互对象之间的松耦合努力

86

开放扩展、关闭修改

139

依赖抽象、不依赖具体

265

最少知道原则:只和密友谈话

339

一个类应该只有一个引起变化的原因



总结:

          第二次看设计模式最大的感触就是、实践、实践过的时基模式都很容易产生共鸣、而看懂了却没有自己写(指不看书敲代码、例子、或者使用设计模式)、没自己写的都有种似懂非懂、还是缺少联系吧、这次总结了下关系的代码、其实都挺简单的、平常都用、搞这行的、都是敲出来的。


——————————欠练——————————
————————chenchen————————




0 0
原创粉丝点击