揭秘设计模式:工厂模式(一)简单工厂模式(Simple Factory)

    链接地址:http://www.xx566.com/detail/133.html

    提到工厂模式,我们并不陌生,在23中设计模式中,有工厂方法(Factory Method)模式、抽象工厂(Abstract Factory)模式,都是工厂模式的形态,在这之外,还有一种简单工厂(Simple Factory)模式,又称静态工厂方法(Static Factory Method)模式,接下来,我们就来学习一下简单工厂模式。

    

    简单工厂模式,其实算是工厂方法模式的一个特殊实现, 即由一个工厂对象决定创建出哪一种产品类的实例,我倒觉得更像是面向对象三大特点之一的封装,即把创建不同的产品类的方法进行封装,封装到一个工厂类里。首先,我们来看一下简单工厂模式的UML类图(来自百度百科):

暂无图片

    从图中我们可能看到,简单工厂模式中包含三种角色,我们简单的介绍一下:

抽象产品(Product)角色:简单工厂模式所创建的对象的父类,抽象出所有实例的公共接口。

具体产品(Concrete Product)角色:是简单工厂模式的创建对象,工厂模式所创建的任何对象都是这个角色的实例。

工厂(Creator)角色:简单工厂模式的核心,负责实现创建所有实例的内部逻辑,工厂类在客户端的直接的调用下创建对象。

 

    接下来,我们通过简单的代码实例来学习简单工厂模式,首先,我们拟定这样一个场景,我们是一个手机供应商,我们需要诸如IPhone、Nokia这样的手机设备,我们不会自己生产手机,我们打算从富士康这样的工厂直接拿货。

 

    我们分析一下这个场景,富士康是一个工厂,他为我们提供各式各样的手机设备,不仅仅是IPhone、Nokia,可能还有HTC、小米等,这样看来手机设备是一个抽象的概念,我们首先抽象出一个接口,代码如下:

/**
 * 抽象手机设备接口
 * User: Realfighter
 * Date: 2014/8/23
 * Time: 22:49
 */
public interface Mobile {
 
    public String brand();//手机品牌
 
    public double price();//手机价格
 
}

    接下来,我们需要对具体的设备进行设置,品牌价格等,具体如下:

/**
 * Nokia手机实例
 * User: Realfighter
 * Date: 2014/8/23
 * Time: 22:52
 */
public class Nokia implements Mobile {
    @Override
    public String brand() {
        return "Nokia";
    }
 
    @Override
    public double price() {
        return 3000.0;
    }
}
/**
 * Iphone手机实例
 * User: Realfighter
 * Date: 2014/8/23
 * Time: 22:52
 */
public class Iphone implements Mobile {
    @Override
    public String brand() {
        return "Iphone";
    }
 
    @Override
    public double price() {
        return 5000.0;
    }
}

       有了这些,我们就可以去寻找富士康这样的代工厂,帮我们生产设备了,如下:

/**
 * 富士康工厂
 * User: Realfighter
 * Date: 2014/8/23
 * Time: 22:54
 */
public class Foxconn {
 
    /**
     * 生产手机方法
     *
     * @return
     */
    public static Mobile produce(String brand) {
        if ("Nokia".equals(brand)) {
            return new Nokia();
        } else if ("Iphone".equals(brand)) {
            return new Iphone();
        }
        return null;
    }
 
}

    过了不久,工期就到了,手机供应商找到富士康,开始交钱提货了,如下:

/**
 * 手机供应商
 * User: Realfighter
 * Date: 2014/8/23
 * Time: 22:58
 */
public class Supplier {
 
    public static void main(String[] args) {
        //手机供应商需要Nokia手机
        Mobile nokia = Foxconn.produce("Nokia");
        System.out.println(nokia.price());//3000.0
        //手机供应商需要Iphone手机
        Mobile iphone = Foxconn.produce("Iphone");
        System.out.println(iphone.price()); //5000.0
    }
 
}

    总结:简单工厂模式非常的简单,虽然不属于23中设计模式的范畴,但在单例、备忘录等模式中均存在应用,所以也很重要。简单工厂模式的优点是直接负责产品 对象的创建,不再由客户端负责创建,实现了责任的分割,缺点是产品等级层次结构如果很复杂,相应的工厂类就会很庞大,有大量逻辑要在工厂类处理,使扩展变 得困难。

你可能感兴趣的:(java,设计模式,simple,简单工厂模式,工厂模式,factory)