工厂方法模式--GOF的23个之一

来源:互联网 发布:2016年淘宝没有销量 编辑:程序博客网 时间:2024/05/06 10:43

工厂方法模式--GOF的23个之一

前言:来自《Head First 设计模式》,不涉及任何商务往来,仅为学习使用,作为参照笔记。定义了一个创建对象的接口,但由子类决定要实例化类是哪一个。工厂方法类把实例化推迟到子类。

 

工厂方法模式类图

 

原本是由一个对象负责所有具体类的实例化,改为一群子类来负责实例化。

 

优点:工厂方法模式帮助我们将产品的“实现”从“使用”中解耦。

缺点:利用字符串传入参数化的类型,很危险。

 

下面给出一张实例类图,来做一些分析:

 

一、  有个做法可以让客户产品(比萨)制作活动局限于工厂客户类(PizzaStore),而同时又能让这些加盟工厂客户类(加盟店)依然可以自由地制作该区域的风味。

二、  工厂客户类方法(orderPizza())对客户产品(Pizza对象)做了许多事情(加工、修改),但由于客户产品(Pizza对象)是抽象的,工厂客户类(orderPizza())并不知道哪些实际的具体类参与进来了。换句话说,这就是解耦(decouple)。

三、  当工厂客户类方法(orderPizza())调用工厂客户类方法(creatPizza())时,某个比萨店子类将负责创建比萨。

做哪一种产品(比萨)呢?当然是由具体的客户类(比萨店)来决定。

四、  工厂经常只产生一种对象,不需要参数化。学习中采用的方式称为“参数化工厂方法”。它可以根据传入的参数创建不同的对象。模式的这两种形式都是有效的。

 

五、  简单工厂模式与工厂方法模式的区别。

简单工厂把全部的事情,在一个地方都处理完了,然而工厂方法却是创建一个框架,让子类决定要如何实现。比方说,在工厂方法中,orderPizza()方法提供了一般的框架,以便创建比萨,orderPizza()方法依赖工厂方法创建的具体类,并制造出实际的比萨。可通过继承PizzaStore类,可以将对象的创建封装起来,但是简单工厂不具备工厂方法的弹性,因为简单工厂不能变更正在创建的产品。



让子类做决定。

理解:普通人申请成为客户(继承PizzaStore),需要产品时,客户自己向工厂要。

继承PizzaStore,实现creatPizza()。--工厂-方法。


 

如有好的建议,可留言或发至笔者邮箱:fzb_xxzy@163.com

 

 

1 0
原创粉丝点击