如果一个函数或者字段与另一个类交往更密切,可以移动字段或函数
- 依赖情况判断是否要在原类增加委托函函数,如果源类也在调用这个函数,引入一个对象比委托更好。
字段迁移
- 1.封装字段,数据隐藏,讲数据和行为分开,对于字段不应该生明为public
- 封装字段的好处,除了第一点,还有第二点便于子类覆盖父类get函数进行新的计算
class fathet{
public Integer getNum(){
return mums;
}
class son{
public Integer getNum(){
return Math.min(num,1);
}
}
第三点get适用于懒加载,在使用该对象的时候才实例化
- 搬移字段时,你以为是引入目标类对象,替换源类中的字段,比如a变为,A. a大错特错,如果是这样刚才在上面讲我们要封装函数不是没意义了~所以还要在源类中使用get A()函数 但是里面返回A. get a()。这样看起来好像加重了工作量,但其实支持可扩展,永远不要直接引用对象.属性来获取属性。
提炼类
提炼类涉及几点
新提炼出来的类,想公开么,毕竟是从A中提炼出来的B 你希望以后是A. B这样调用 还是直接公开B 使用B的途径 以及是否可以被别人修改
将类内联
一个类调用另一个类的函数,最要紧的就是隐藏委托关系,封装非常重要,
class A{
public Integer get back(){
return B.get back()
}}
别人不知道里面还调用了B 被封装隐藏了
天天使用中间层 天天使用代理类 让我们隐藏再隐藏 get再get
本地扩展
想要为一个不可修改的类,增加功能或者修改功能,比如Date类
那就在外形成一个本地扩展类,utils,有两种方式封装Date类 ,1.子类继承或者2.实例化维护Date类在内部的包装类
第2个方式的包装类,永远不要忘记全部封装. 上面一直在提到的,内部维护一个对象,想要使用内部维护对象的属性,必须再封装一层get