根据前面的类的抽象与封装的 基础上,引伸出的概念
职责
对类的职责进行拆分
例如我有一个类(确切的说是接口), 用来描述 付款和 查询余额的操作
// 这里只是相应抽象的伪代码
public interface Payment{
// 支付
public boolean pay(double money);
// 查询余额
public boolean checkBalance();
}
后面在新加入了一个方法,用来表述用户付款之后的会进行打分的操作,
// 这里只是相应抽象的伪代码
public interface Payment{
// 支付
public boolean pay(double money);
// 查询余额
public boolean checkBalance();
// 评分
public boolean makeScore();
}
这个打分的操作明细和我本来的类的描述不符合,那么我要进行相应的拆分,构建一个新的专门打分的类
public Class UserScore{
// 评分
public boolean makeScore();
// 顺便查看分数
public boolean getScore();
}
- 委托代理: 要么将中间人删除,要么加入中间人:那么会在下面对应的两种形式之间进行切换
main(){
PaymentMenager payMeneger = new PaymentMenager ();
payMeneger.pay(10.00);
}
public Class PaymentMenager {
public boolean pay(double e){
payment.pay(e);
... // 其他操作,比如日志之类
}
}
将基础类进行拓展与提炼子类(继承): 现在基本上的基础类都被人为的拓展了,可以不用造轮子
将函数的职责进行拆分: 比如分离查询和修改,使得成为不同的函数
// 这是对象只用于查询
PaymentDao selectDao;
// 这个对象用于 增删改的操作
PaymentDao updateDao;
以工厂模式取代构造函数:
这样可以创建之后初始化一些固定的内容, 也可以限制创建对象的个数
// 构造函数
Employee(int type){
this.type = type ;
}
// 工厂模式
static EmployeeFactory(int type){
return new Employee(type);
}
- 向上转型: 为了隐藏内部,也为了方便调用
调用相同的方法抽象,但是实际上的实现有所不同
// mian 函数里
// 有一个方法需要为全体员工发工资(这里工资为固定)
Employee cleaningEmployee= new CleaningEmployee();
Employee canteenEmployee = new CanteenEmployee();
finance.payOff(cleaningEmployee);
finance.payOff(canteenEmployee );
// 抽象类
public abstract Class Employee {
public abstract double getWages();
}
// 实现类1
public Class CleaningEmployee extends abstract{
public double getWages(){
return wages ;
}
}
// 实现类2
public Class CanteenEmployee extends abstract{
public double getWages(){
return wages ;
}
}
// 调用的类
public Class Finance {
public boolean payOff(Employee employee){
double money = employee.getWages();
.....
}
}
上移 字段,函数,构造体
将子类共有的字段和函数移到父类中去,将子类构造函数中相同的部分,移到父类中去下移 函数,字段:
这样是为了别的子类A不需要用到某一字段或函数,而子类B却需要使用时,却会包含的这种情况,那么父类的共用的方法要转移到 子类B中去构造模板函数
充分使用上移的方法,将子类可能共同用到函数操作,放到上层,供给所有的子类使用以委托关系和 继承之间相互转换,以用于不同的应用场景:
这一点完全是处于程序员自己去判断
补充: POJO 类必须写 toString 方法。如果继承了另一个 POJO 类,注意在前面加一下 super.toString。
大型重构的方法:
1) 梳理并分解继承的体系
2) 将过程化设计转换为面向对象设计
3) 将领域和表述/显示 分离:将逻辑分出来, 创建独立的领域类
4) 提炼继承体系