标签:
思考问题:一个工厂生产汽车,在不知道具体工厂和具体汽车品牌时应该如何设计?
答案:工厂方法模式。定义一个工厂接口和汽车接口,然后在工厂接口中声明一个factory工厂方法,传入参数用于决定需要生产的汽车的类型。
声明汽车工厂接口:
package com.shusheng.factoryMethodModel;
/**抽象工厂*/
public interface CarFactoryI {
//工厂方法,创建一个汽车对象,其输入参数类型自行设置
public <T extends CarI> T factory(Class<T> c);
}
声明汽车接口:
package com.shusheng.factoryMethodModel;
public interface CarI {
}
定义汽车工厂实现类:
package com.shusheng.factoryMethodModel;
/**具体的googleCar工厂*/
public class GoogleCarFactory implements CarFactoryI {
//生产汽车
@Override
public <T extends CarI> T factory(Class<T> c) {
CarI carI = null;
try {
//carI = (CarI) Class.forName(c.getName()).newInstance();//显示加载class文件,两种方式都可以
carI = c.newInstance();//隐式加载class文件
} catch (Exception e) {
e.printStackTrace();
}
return (T) carI;
}
}
定义具体汽车类:
奔驰类:
package com.shusheng.factoryMethodModel;
public class BMW implements CarI {
}
宝马类:
package com.shusheng.factoryMethodModel;
public class Benz implements CarI {
}
测试程序:
package com.shusheng.factoryMethodModel;
public class FactoryMethodTest {
public static void main(String[] args) {
CarFactoryI factoryI = new GoogleCarFactory();
Benz benz = factoryI.factory(Benz.class);//生产奔驰
System.out.println(benz);//奔驰
BMW bmw = factoryI.factory(BMW.class);//生产宝马
System.out.println(bmw);//宝马
}
}
标签:
原文地址:http://blog.csdn.net/petershusheng/article/details/51334462