package M10EX16;
interface Cycle{
void print();
}
interface CycleFactory{
Cycle getCycle();
}
class Unicycle implements Cycle{
private Unicycle(){}
public void print() {
System.out.println("Unicycle");
}
public static CycleFactory fact=
new CycleFactory() {
@Override
public Cycle getCycle() {
// TODO Auto-generated method stub
return new Unicycle();
}
};
}
class Bicycle implements Cycle{
private Bicycle(){}
public void print() {
System.out.println("bicycle");
}
public static CycleFactory fact=
new CycleFactory() {
@Override
public Cycle getCycle() {
// TODO Auto-generated method stub
return new Bicycle();
}
};
}
public class test {
public static void factoryConsumer(CycleFactory fact) {
Cycle cy=fact.getCycle();
cy.print();
}
public static void main(String[] args) {
factoryConsumer(Unicycle.fact);
factoryConsumer(Bicycle.fact);
}
}
首先定义了两个接口:Cycle和CycleFactory。
然后通过实现接口创建了Unicycle类,实现了Cycle接口中的print()方法.
接下来在Unicycle中使用了匿名类的方法创建了Unicycle的工厂类
class Unicycle implements Cycle{
public void print() {
System.out.println("Unicycle");
}
public static CycleFactory fact=
new CycleFactory() {
@Override
public Cycle getCycle() {
// TODO Auto-generated method stub
return new Unicycle();
}
};
}
这里Unicycle的工厂类是个匿名类,实际上这个匿名类实现了CycleFactory接口,并在getCycle()方法中返回了一个Unicycle对象,这使得Unicycle的构造方法可以是private的,只能通过匿名的工厂类来创建Unicycle的对象。且一般来说工厂对象只需要一个,所以设置为static。