## 30.工厂模式
想象一下一家餐馆,它实际上是一家食品工厂。 如果你需要 dosa <sup class="footnote">[ [64](#_footnotedef_64 "View footnote.") ]</sup> ,请问服务员,如果你需要 idiyappam <sup class="footnote">[ [65](#_footnotedef_65 "View footnote.") ]</sup> ,请问服务员 它。 本质上,饭店或食品工厂创建了一个称为服务员的通用界面,供你订购任何东西。 你只问他,他就送了,你不必关心 dosa 的制作方式或 idiyappam 的制作方式。
在编程中,你可以做同样的事情,你可以实现一个工厂类,该类隐藏了制造对象的困难,并为你提供了一个通用的接口来制造对象。 看下面的代码 [factory.rb](code/design_patterns/factory.rb) 。 输入并运行它。
```rb
```
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
```rb
|
```
# factory.rb
class Shape
def draw
puts "In instance of #{self.class}"
end
end
class Square < Shape
end
class Circle < Shape
end
class ShapeFactory
def get_shape type
case type
when :square then Square.new
when :circle then Circle.new
end
end
end
shape_factory = ShapeFactory.new
square = shape_factory.get_shape :square
circle = shape_factory.get_shape :circle
square.draw
circle.draw
```rb
|
```
输出:
```rb
In instance of Square
In instance of Circle
```
让我们看看它是如何工作的。 代码中的重点是这一点
```rb
class ShapeFactory
def get_shape type
case type
when :square then Square.new
when :circle then Circle.new
end
end
end
```
我们有一个名为`ShapeFactory`的类,该类提供了通过函数`get_shape`制作对象的通用接口。 我们将要创建的对象类型传递给此`get_shape`。 由于这只是示例,此处的工厂模式看起来像是使代码复杂而不是程序员更简单,但是在现实生活中,对象的创建可能非常复杂,如果工厂类可以掩盖复杂性,那么它的生命就可以了。 程序员使用它来构建他的软件将变得简单。
### 30.1。 行使
想象一下,你正在编写用于游戏的软件,并且需要创建敌对对象,例如坦克,直升机,导弹发射器,步兵等。 编写一个工厂模式,当你调用`Enemy.random`时会返回一个随机的敌人对象。
- 前言
- 红宝石
- 先决条件
- 1.安装 Ruby
- 2.在线资源
- 3.入门
- 4.比较与逻辑
- 5.循环
- 6.数组
- 7.哈希和符号
- 8.范围
- 9.功能
- 10.可变范围
- 11.类&对象
- 12.安全导航
- 13.打破大型程序
- 14.结构和 OpenStruct
- 15. Rdoc
- 16. Ruby 样式指南
- 17.模块和混入
- 18.日期和时间
- 19.文件
- 20. Proc,Lambda 和块
- 21.多线程
- 22.异常处理
- 23.正则表达式
- 24.宝石
- 25.元编程
- 26.基准
- 27.测试驱动开发
- 28.观察者模式
- 29.模板模式
- 30.工厂模式
- 31.装饰图案
- 32.适配器模式
- 33.单例模式
- 34.复合模式
- 35.建造者模式
- 36.策略模式
- 赞助商
- 捐
- 人们怎么说
- 版权
- 取得这本书