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

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

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

 

工厂方法模式类图

 

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

 

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

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

 

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

 

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

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

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

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

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

 

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

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



让子类做决定。

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

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


 

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

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值