interface / abstract 简单应用

来源:互联网 发布:c语言打印布尔值 编辑:程序博客网 时间:2024/06/13 12:01

通常一个类的功能变得复杂的时候,会考虑重构代码,

进一步抽象出其它类,达到解耦作用,同时也方便维护。

无论是采用设计模式还是简单重构,多少都会涉及到接口和抽象类的使用。

以一个简单的例子加深理解。

 

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 --

0 0
原创粉丝点击