简单工厂

前提

        交通工具接口 Vehicle,且有一个抽象方法 run();

package demo.simplefactory;

/**
 * 交通工具接口
 * @author Martin
 * create by 2013-6-3
 * update by 2013-6-3
 */

public interface Vehicle {

    /**
     * 运行
     * @param destination 目的地
     */
    public void run(String destination);
}

        Bus 类实现 Vehicle 接口,并实现 run() ;

package demo.simplefactory;

/**
 * Bus
 * @author Martin
 * create by 2013-6-3
 * update by 2013-6-3
 */

public class Bus implements Vehicle {

    @Override
    public void run(String destination) {
        System.out.println("\t我是一辆 bus,到达 " + destination + ", 需要三个小时。");
    }
}

        Car 类实现 Vechicle 接口,并实现 run();

package demo.simplefactory;

public class Car implements Vehicle {
    @Override
    public void run(String destination) {
        System.out.println("\t我是一辆 car,到达 " + destination + ",需要一个小时,很快吧!");
    }
}

        好吧,到现在为止,我想分别实例化 Bus 类和 Car 类,应该这么做:

        Vehicle bus = new Bus();

        Vehicle car = new Car();

问题

        但是这样有一个不好的地方就是,用户知道了你的实现(Bus和Car)。有时候用户不应该也不想知道你是怎么实现的,他就想他要一个速度快的交通工具,你给他一个就可以了;他要一个普通速度的交通工具,你给他一个普通的就行了。

方案

        这时,我们就需要一个工厂类,交通工具工厂类 VehicleFactory。当用户说,你给我一个速度快的工具,你就给他一个。在 VehicleFactory 里就有一个静态方法 createVehicle(String type),参数 type 用来让用户告诉你,他要什么样速度的交通工具。 VehicleFactory 如下:

package demo.simplefactory;

public class VehicleFactory {

    /**
     * 快速交通工具
     */
    public static String VEHICLE_FAST = "fase";
    
    /**
     * 普通交通工具
     */
    public static String VEHICLE_NORMAL = "normal";
    
    /**
     * 构造方法私有话
     */
    private VehicleFactory() {}
    
    /**
     * 创建交通工具
     * @param type 交通工具类型
     * @return
     */
    public static Vehicle createVehicle(String type) {
        Vehicle result = null;
        if(VEHICLE_FAST.equals(type)) {
            result = new Car();
        } else if(VEHICLE_NORMAL.equals(type)) {
            result = new Bus();
        }
        return result;
    }
}

        下面,客户端这可以这样调用:

package demo.simplefactory;

public class Client {

    public static void main(String[] args) {
        go("西藏");
    }
    
    public static void go(String destination) {
        System.out.println("去 " + destination + ",我需要快速交通工具:");
        Vehicle vehicle = VehicleFactory.createVehicle(VehicleFactory.VEHICLE_FAST);
        vehicle.run(destination);
        System.out.println();
        System.out.println("去 " + destination + ",我需要变通交通工具:");
        Vehicle vehicle2 = VehicleFactory.createVehicle(VehicleFactory.VEHICLE_NORMAL);
        vehicle2.run(destination);
    }
} 

输出

        去 西藏,我需要快速交通工具:
            我是一辆 car,到达 西藏,需要一个小时,很快吧!

        去 西藏,我需要变通交通工具:
           我是一辆 bus,到达 西藏, 需要三个小时。

好处

        隐藏实现

        Vehicle vehicle = VehicleFactory.createVehicle(VehicleFactory.VEHICLE_FAST);  你只知道是一个速度快的交通工具,但你不知道具体是什么。

类图

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值