java匿名内部类的使用场景_java匿名内部类的使用场景
不錯,正是模板方法模式的運用。這個類蠻簡單的:首先是一個create()方法,用來產(chǎn)生具體類的對象,留交各具體工廠實現(xiàn)去實現(xiàn)。然后是一個Map類型的靜態(tài)變量,用來存放具體工廠的實現(xiàn)以及他們的ID號。接著的一個方法使用來增加一個具體工廠的實現(xiàn)。后一個靜態(tài)方法是用來獲取具體對象,里面的那個Class.forName……的作用是調(diào)用以ID號為類名的類的一些靜態(tài)的東西。
下面,我們來看具體的類的實現(xiàn):
package polyFactory;
public class Circle implements Shape {
public void draw() {
// TODO Auto-generated method stub
System.out.println("the circle is drawing...");
}
public void erase() {
// TODO Auto-generated method stub
System.out.println("the circle is erasing...");
}
private static class Factory extends ShapeFactory
{
protected Shape create()
{
return new Circle();
}
}
static {ShapeFactory.addFactory("Circle",new Factory());}
}
這個類的其他的地方也平常得很。但就是后面的那個內(nèi)部類Factory用得好。呢,這個類只做一件事,就是產(chǎn)生一個Circle對象,與其他類無關(guān),就這一個條也就滿足了使用內(nèi)部類的條件。第二呢,這個Factory類需要是靜態(tài)的,這也得要求它被使用內(nèi)部類,不然,下面的ShapeFacotry.addFactory就沒辦法add了。而后的那個靜態(tài)的語句塊是用來將具體的工廠類添加到抽象的工廠里面去。在抽象工廠里調(diào)用Class.forName就會執(zhí)行這個靜態(tài)的語句塊了。
下面仍然是一個具體類:
package polyFactory;
public class Square implements Shape {
public void draw() {
// TODO Auto-generated method stub
System.out.println("the square is drawing...");
}
public void erase() {
// TODO Auto-generated method stub
System.out.println("the square is erasing...");
}
private static class Factory extends ShapeFactory
{
protected Shape create()
{
return new Square();
}
}
static {ShapeFactory.addFactory("Square",new Factory());}
}
后,我們來測試一下:
String[] ids = new String[]{"Circle","Square","Square","Circle"};
for(int i=0;i
{
Shape shape = ShapeFactory.createShape(ids[i]);
shape.draw();
shape.erase();
}
測試結(jié)果為:
the circle is drawing...
the circle is erasing...
the square is drawing...
the square is erasing...
the square is drawing...
the square is erasing...
the circle is drawing...
the circle is erasing...
這個方法是巧妙地使用了內(nèi)部類,將具體類的實現(xiàn)和它的具體工廠類綁定起來,由具體類的實現(xiàn)者在這個內(nèi)部類的具體工廠里去產(chǎn)生一個具體類的對象,這當(dāng)然容易得多。雖然需要每一個具體類都創(chuàng)建一個具體工廠類,但由于具體工廠類是一個內(nèi)部類,這樣也不會隨著具體類的增加而不斷增加新的工廠類,使得代碼看起來很臃腫,這也是本方法不得不使用內(nèi)部類的一個原因吧。
相關(guān)推薦:
來源:考試大-Java認(rèn)證
責(zé)編:xxm??評論?糾錯
總結(jié)
以上是生活随笔為你收集整理的java匿名内部类的使用场景_java匿名内部类的使用场景的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 脸下巴肉多怎么办
- 下一篇: 面对对象课程设计报告java,面向对象编