首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件开发 >

设计方式总结:工厂模式

2013-03-13 
设计模式总结:工厂模式简单工厂简单工厂不是一个设计模式,而是一种编程习惯。使用场景:当客户端需要实例化

设计模式总结:工厂模式

简单工厂


简单工厂不是一个设计模式,而是一种编程习惯。

使用场景:

当客户端需要实例化一个类,但究竟实例化哪个类,要在运行时由一些条件来决定。

找出变化的方面(实例化哪个类),把他们从不变的部分分离出来,交由“简单工厂”完成。

设计方式总结:工厂模式

 

public class PizzaStore{    SimplePizzaFactory factory;    Public PizzaStore(SimplePizzaFactory factory){        this.factory = factory;        }    public Pizza orderPizza(String type){        Pizza pizza = factory.createPizza(type);        pizza.prepare();        pizza.bake();        pizza.cut();        pizza.box();        return pizza;    }}//简单工厂public class SimplePizzaFactory{    public Pizza createPizza(String type){        Pizza pizza = null;        if(type.equals("cheese"))            pizza = new CheesePizza();        else if(type.equals("veggie"))            pizza = new VeggiePizza();        ......         return pizza;       }}
工厂方法模式

定义:

Define an interface for creating an object, but let subclasses decide which class to instantiate. Factory Method lets a class defer instantiation to subclasses.

工厂方法模式定义了一个创建对象的接口,但由子类决定实例化哪一个类。工厂方法让类的实例化推迟到子类。

——所谓“决定”,是指在编写Creator时并不知道实际要创建的Product是哪一个,选择了使用哪个子类,就决定了实际创建的Product是什么。


类图:

设计方式总结:工厂模式

设计方式总结:工厂模式

public interface VehicheFactory{    public AbstractCar createCar();//通常以“工厂方法”来实现,将实例化延迟到子类。    public AbstractBus createBus();    public AbstractTruck createTruck();}public class BenzFactory implements VehicheFactory{    public AbstractCar createCar(){        return new BenzCar();    }    ...}public class BmwFactory implements VehicheFactory{    public AbstractCar createCar(){        return new BmwCar();    }    ...}


角色:

1)抽象产品类

2)具体产品类

3)抽象工厂类

        有几个产品族,则在抽象工厂类中就应该有几个创建方法

4)具体工厂类


优点:

封装性    
产品族内的约束是非公开状态的      


缺点:

 产品族的扩展非常困难;例如增加一个Motor产品族,需要修改AbstractCreator、ConcreteCreator


使用场景:

        抽象工厂模式是工厂方法模式的升级版本,当有多个业务品种、业务分类时,并且产品族内都有相同的约束时,则可使用该模式。

 

比较

工厂方法使用继承来创建对象;抽象工厂则通过对象的组合

抽象工厂可以将一群相关的产品集合起来。

热点排行