【Head First】类图关系与代码对应(Java)
2014-10-04 17:57
211 查看
亲!
最看Head First设计模式、深感比大话设计模式更深、当初感觉策略与工厂结合特别不爽、因为还要改工厂、这次直接用接口选择、不修改、只扩展、呼呼、听说有好多人看这个有难度、其实我看也有很多迷糊的、也许是因为与大话设角度的问题吧、这次从新总结了类图之间的关系、重在代码、是什么的知识就不讲了。
发生依赖关系的两个类都不会增加属性。其中的一个类作为另一个类的方法的参数或者返回值,或者是某个方法的变量而已。
发生关联关系的两个类,其中的一个类成为另一个类的属性,而属性是一种更为紧密的耦合,更为长久的持有关系。
从关系的生命周期来看:
依赖关系是仅当类的方法被调用时而产生,伴随着方法的结束而结束了。
关联关系是当类实例化的时候即产生,当类销毁的时候,关系结束。相比依赖讲,关联关系的生存期更长。
鸟没了翅膀也没法活。
鸟群没了、鸟照样活。
——————————欠练——————————
————————chenchen————————
最看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、方法中声明或new Public 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类构造时从类外传进一个对象A、B对象释放、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————————
相关文章推荐
- UML之类图学习——类图的五种关系与代码的对应关系
- android:inputType的XML与Java代码对应关系
- SQL的数据类型与Java数据类型的对应关系
- UML中类之间的关系及其Java代码例子(转)
- flex中各个数据类型和java中的各个数据类型的对应关系
- 23种设计模式 UML 类图及对应示例代码 (三)
- 23种设计模式 UML 类图及对应示例代码 (二)
- Window Classes 以及代码中类名和运行时类名的对应关系
- java 与 ActionScript基础类型或常用类的对应关系图
- FLEX数据类型和JAVA数据类型对应关系表
- FLEX数据类型和JAVA数据类型对应关系表
- 一个关于继承关系中静态快、成员变量、构造体代码的执行顺序的Java代码
- XOOPS - theme主题风格 - 模板代码、区块设置与页面效果之间的对应关系
- XOOPS - theme主题风格 - 模板代码、区块设置与页面效果之间的对应关系
- 使用 IBM Rational Software Architect 从 Java 代码逆向工程生成 UML 类图和序列图
- UML中类之间的关系及其Java代码例子 -转载
- Java类型、Hibernate映射类型以及SQL类型之间的对应关系
- 常用字符集编码名称和代码对应关系表
- UML中类之间的关系及其Java代码例子
- Hibernate,java,sql类型的对应关系