编程时为了提高复用性、可维护性,我们希望把共性的东西提取到一处,这是很自然的想法。但是往往有的时候不是那么容易提取共性, 因为他只是类似,并非一致,又夹杂着差异。典型的例子是JDBC代码。
那么为了实现这种情况下的复用,唯有使粒度变小,将基本的原子操作提为共性。
类图如下:
People类
public abstract class People {
abstract void cookWater();
abstract void cleanVegetable();
abstract void washDishes();
void cook(){
cleanVegetable();
cookWater();
washDishes();
}
}
ConcretePeople_A类
public class ConcretePeople_A extends People {
@Override
void cookWater() {
System.out.println("A: water has been cooked");
}
@Override
void cleanVegetable() {
System.out.println("A: vegetable has been cleaned");
}
@Override
void washDishes() {
System.out.println("A: dishes have been washed");
}
}
ConcretePeople_B类
public class ConcretePeople_B extends People {
@Override
void cookWater() {
System.out.println("B: water has been cooked");
}
@Override
void cleanVegetable() {
System.out.println("B: vegetable has been cleaned");
}
@Override
void washDishes() {
System.out.println("B: dishes have been washed");
}
}
main方法:
public class Main {
public static void main(String[] args){
People a=new ConcretePeople_A();
People b=new ConcretePeople_B();
a.cook();
b.cook();
}
}