码迷,mamicode.com
首页 > 其他好文 > 详细

工厂方法模式

时间:2016-05-07 10:26:31      阅读:259      评论:0      收藏:0      [点我收藏+]

标签:

思考问题:一个工厂生产汽车,在不知道具体工厂和具体汽车品牌时应该如何设计?
答案:工厂方法模式。定义一个工厂接口和汽车接口,然后在工厂接口中声明一个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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!