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

工厂方法模式

时间:2015-06-07 23:10:30      阅读:186      评论:0      收藏:0      [点我收藏+]

标签:

  GOF:定义一个用于创建对象的接口,让子类决定实例化哪一个类。Factory Method使一个类的实例化延迟到其子类。  

  类图:

技术分享

  适用性:

  • 当一个类不知道它所必须创建的对象的类的时候。
  • 当一个类希望由它的子类来指定它所创建的对象的时候。
  • 当类将创建对象的职责委托给多个帮助子类中的某一个,并且你希望将哪一个帮助子类是代理者这一信息局部化的时候。

 


 

  Factory Method相当于一个特殊的new。

 

  使用工厂方法的原因

    (1)当new代码很多很复杂,而且耗时长,这时不仅代码难看,而且初始化类的时间会很长。----> 这时就能将大多数初始化的行为放到factory中。(封装与分派)

    (2)某个类有很多子类,每次使用都要在客户代码区利用长长的if-else,switch等语句来判断使用哪个子类。----> 将这些if-else等语句放到某个方法中,封装起来。 ----> 进一步放到factory中,由factory统一管理这些子类的创建。

 

  工厂的类型

  1.每个产品都对应一个具体工厂

  2.简单工厂。在FactoryMethod方法加入参数,然后通过判断参数来创建不同的Product。

  3.使用模板。

 

  简单工厂代码:

public class test {
    private static Factory factory;
    public static void main(String[] args) {
        factory = new ConcreteFactory();
        Car car = factory.createCar("Benz");
        car.drive();
    }
}

interface Factory {
    Car createCar(String type);
}
class ConcreteFactory implements Factory {
    private void init() {}; //想象这里是很复杂的初始化
    public ConcreteFactory() {
        init();
    }
    @Override
    public Car createCar(String type) {
        switch (type) {
        case "Benz":
            return new Benz();
        case "Audi":
            return new Audi();
        default:
            return new normal();
        }
    }
}

interface Car {
    public void drive();
}
class normal implements Car {
    public void drive() {
        System.out.println("normal car");
    }
}
class Benz implements Car {
    public void drive() {
        System.out.println("Benz");
    }
}
class Audi implements Car {
    public void drive() {
        System.out.println("Audi");
    }
}

  使用模板:

class Creator {
public:
    virtual Product* create() = 0;
};

template <typename TheProduct>
class StandardCreator : public Creator {
public:
    virtual Product* create();
};

template <typename TheProduct>
class StandardCreator<TheProduct>::create() {
    return new TheProduct();
}

 

  总结:工厂根据你提供的图纸(String type),生产出你想要的东西。

工厂方法模式

标签:

原文地址:http://www.cnblogs.com/programmer-kaima/p/4367823.html

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