常常會在程式中遇到多個子類有共同的方法已經相似的調用過程。這個時候我們就可以使用模板模式來解決這些重覆性的工作,例如我們買東西的時候一般都是挑選商品、付款這樣的步驟,區別僅僅是挑選的商品品種不一樣而已,這個時候我們就可以使用模板模式。那麼模板模式需要怎麼來實現呢,如下圖 代碼如下: public c ...
常常會在程式中遇到多個子類有共同的方法已經相似的調用過程。這個時候我們就可以使用模板模式來解決這些重覆性的工作,例如我們買東西的時候一般都是挑選商品、付款這樣的步驟,區別僅僅是挑選的商品品種不一樣而已,這個時候我們就可以使用模板模式。那麼模板模式需要怎麼來實現呢,如下圖
代碼如下:
public class test
{
public static void main(String args[])
{
goods f=new fruit();
f.run();
goods d=new drink();
d.run();
}
}
class goods
{
void run()
{
getgoods();
pay();
}
void getgoods()
{
System.out.println("get");
}
void pay()
{
System.out.println("pay");
}
}
class fruit extends goods
{
void getgoods()
{
System.out.println("fruit");
}
}
class drink extends goods
{
void getgoods()
{
System.out.println("drink");
}
}
結果如圖:
這樣我們就可以避免在子類中涉及具體的演算法,只需要將重覆的內容已經演算法提取到父類即可,降低了耦合。
至此,我們還可以加入一個鉤子的機制,即可相應的對一些不需要的演算法來進行控制。
代碼如下
public class test
{
public static void main(String args[])
{
goods f=new fruit();
f.run();
goods d=new drink();
d.run();
}
}
class goods
{
void run()
{
if(hasGetGoods())
getgoods();
pay();
}
void getgoods()
{
System.out.println("get");
}
boolean hasGetGoods()
{
return false;
}
void pay()
{
System.out.println("pay");
}
}
class fruit extends goods
{
boolean hasGetGoods()
{
return true;
}
void getgoods()
{
System.out.println("fruit");
}
}
class drink extends goods
{
boolean hasGetGoods()
{
return false;
}
void getgoods()
{
System.out.println("drink");
}
}
結果:
2016-8-3
21:25