通常一个类的功能变得复杂的时候,会考虑重构代码,
进一步抽象出其它类,达到解耦作用,同时也方便维护。
无论是采用设计模式还是简单重构,多少都会涉及到接口和抽象类的使用。
以一个简单的例子加深理解。
ComplexTest 会随着功能的增加逐渐变得复杂,难以理解和维护。
接口SampleInterface及 抽象类SampleAbstract 可以使之变得简单,便于理解和维护。
也便于以后扩展功能SampleSubE...
1.主代码:
package com.example;
public class MainTest {
public static void main(String args[]) {
boolean isComplex = false;
if ( isComplex) {
ComplexTest complex = new ComplexTest();
complex.function1();
complex.function2();
complex.function3();
complex.function4();
}else{
SampleAbstract subA = new SampleSubA();
SampleAbstract subB = new SampleSubB();
SampleAbstract subC = new SampleSubC();
SampleAbstract subD = new SampleSubD();
subA.function();
subB.function();
subC.function();
subD.function();
}
}
}
2. 未使用 interface /abstract 之前代码:
package com.example;
public class ComplexTest{
public void function1() {
System.out.println("I am function1 in ComplexTest!");
}
public void function2() {
System.out.println("I am function2 in ComplexTest!");
}
public void function3() {
System.out.println("I am function3 in ComplexTest!");
}
public void function4() {
System.out.println("I am function4 in ComplexTest!");
}
}
3. 使用interface /abstract 代码:
(1)接口及抽象类
package com.example;
interface SampleInterface{
void function();
}
public abstract class SampleAbstract implements SampleInterface{
@Override
public void function() {
}
}
(2)子类A
package com.example;
public class SampleSubA extends SampleAbstract{
@Override
public void function() {
System.out.println("I am function in " + this.getClass().toString());
}
}
子类B
package com.example;
public class SampleSubB extends SampleAbstract{
@Override
public void function() {
System.out.println("I am function in " + this.getClass().toString());
}
}
(3)子类C
package com.example;
public class SampleSubC extends SampleAbstract{
@Override
public void function() {
System.out.println("I am function in " + this.getClass().toString());
}
}
(4)子类D
package com.example;
public class SampleSubD extends SampleAbstract{
@Override
public void function() {
System.out.println("I am function in " + this.getClass().toString());
}
}
-- END --