java匿名内部类的使用场景_java匿名内部类的使用场景

不错,正是模板方法模式的运用。这个类蛮简单的:首先是一个create()方法,用来产生具体类的对象,留交各具体工厂实现去实现。然后是一个Map类型的静态变量,用来存放具体工厂的实现以及他们的ID号。接着的一个方法使用来增加一个具体工厂的实现。后一个静态方法是用来获取具体对象,里面的那个Class.forName……的作用是调用以ID号为类名的类的一些静态的东西。

下面,我们来看具体的类的实现:

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());}

}

这个类的其他的地方也平常得很。但就是后面的那个内部类Factory用得好。呢,这个类只做一件事,就是产生一个Circle对象,与其他类无关,就这一个条也就满足了使用内部类的条件。第二呢,这个Factory类需要是静态的,这也得要求它被使用内部类,不然,下面的ShapeFacotry.addFactory就没办法add了。而后的那个静态的语句块是用来将具体的工厂类添加到抽象的工厂里面去。在抽象工厂里调用Class.forName就会执行这个静态的语句块了。

下面仍然是一个具体类:

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();

}

测试结果为:

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

这个方法是巧妙地使用了内部类,将具体类的实现和它的具体工厂类绑定起来,由具体类的实现者在这个内部类的具体工厂里去产生一个具体类的对象,这当然容易得多。虽然需要每一个具体类都创建一个具体工厂类,但由于具体工厂类是一个内部类,这样也不会随着具体类的增加而不断增加新的工厂类,使得代码看起来很臃肿,这也是本方法不得不使用内部类的一个原因吧。

相关推荐:

来源:考试大-Java认证

责编:xxm  评论 纠错

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值