1. 程式人生 > >Java基礎總結之設計模式(四)

Java基礎總結之設計模式(四)

介面卡模式:

我們在開發程式的是時候,我們會寫介面,會寫介面的實現類,但是當介面中的方法很多時,我們則會因為為了使用裡面的一個功能而"被迫"實現介面中的所有方法。這樣的效率是很低的。就算是介面中其他的方法全部空實現,那對於程式碼的冗餘等爺都是很大的。所以介面卡模式是思想是將一個介面轉換成客戶希望的另外一個介面。就上訴的例子來講,我就是不想實現那麼多方法,我作為客戶,我的需求就是,你給我一個介面卡類,你可以是全部是空實現也好或者是其他方式實現了這個類也好,反正我都不管,我就繼承你的,然後我自己來重寫方法。剛開始自己對介面卡模式其實也不算了解,網上的人都講得很專業,於是自己是通過以下程式讓自己明白介面卡模式是什麼樣的一個模式。

package h.l.adapterpattern;

public class Student {
	private int id;
	private String username;
}
package h.l.adapterpattern;

public interface StudentDao {

	public abstract void add(Student s);//增加

	public abstract void delete(int id);//刪除

	public abstract void update(int id);//更新

	public abstract void find(int id);//查詢

}
package h.l.adapterpattern;

public class StudentDaoImpl implements StudentDao {

	@Override
	public void add(Student s) {
		System.out.println("增加操作!");
	}

	@Override
	public void delete(int id) {
		System.out.println("刪除操作!");
	}

	@Override
	public void update(int id) {
		System.out.println("更新操作!");
	}

	@Override
	public void find(int id) {
		System.out.println("查詢操作!");
	}

}
package h.l.adapterpattern;

public class Test {

	public static void main(String[] args) {
		Student s = new Student();
		StudentDao sd = new StudentDaoImpl();
		sd.add(s);
	}

}
//執行結果
增加操作!

上面的程式碼是我們常規的寫法,但是仔細那麼一想,萬一我接口裡面寫了那麼多方法,而我想要實現這個StudentDao介面的類只需要用到一個怎麼辦?我難不成還是和這個StudentDaoImpl一樣,全部實現了他的類嗎?當然不希望那樣!那麼此時介面卡的作用就來了,我新建一個類空實現這個介面:

package h.l.adapterpattern;

public class StudentDaoAdapter implements StudentDao {

	@Override
	public void add(Student s) {
		System.out.println("增加操作!");
	}

	@Override
	public void delete(int id) {
		System.out.println("刪除操作!");
	}

	@Override
	public void update(int id) {
		System.out.println("更新操作!");
	}

	@Override
	public void find(int id) {
		System.out.println("查詢操作!");
	}

}

新建完成後,我就可以根據我的需求想要實現該介面的那個方法,我就繼承這個介面卡類,重寫該方法就可以!

package h.l.adapterpattern;

public class AnyMethodImpl extends StudentDaoAdapter {

	@Override
	public void add(Student s) {
		System.out.println("介面卡模式下執行");
		super.add(s);
	}
}
package h.l.adapterpattern;

public class Test {

	public static void main(String[] args) {
		Student s = new Student();
		StudentDao sd = new AnyMethodImpl();
		sd.add(s);
	}

}
//執行結果
介面卡模式下執行
增加操作!

顯然,有了介面卡模式,我們是否就可以考慮把各種行為都寫在同一個接口裡面,然後給他一個介面卡類直接去繼承,需要哪個方法就實現哪個方法了呢?當然依舊設計原則的六點,還是建議將行為分分類,寫進不同的介面。另外最後在強調一點的是如果覺得介面卡模式在上述程式碼中感覺體現不出其效果,建議不妨去參考Java基礎總結之GUI圖形介面程式設計那一個博文,能在監聽事件的執行緒過程中有所體會有所感悟。


注:以上文章僅是個人學習過程總結,若有不當之處,望不吝賜教。