Wednesday, October 29, 2008

(5)Ruby中的工厂方法实现

了解设计模式的人一定知道工厂方法,有时候我们希望通过其他的方式创建一个类对象,而不是通过new关键字。不过new是所有类多有的public方法,我们要防止使用这个类的人直接通过new来创建类。Ruby提供了一个对方法访问权限控制的方法:private_class_method :new,这样我们就可以防止别人直接调用new来创建对象,下面是一个例子:
class Point
# 定义初始化方法...
def initialize(x,y) #传入参数
@x,@y = x,y
end

# 我们让new变成私有方法,这样别人就不能从外部调用了
private_class_method :new

def Point.cartesian(x,y) # 定义工厂方法,注意它是一个类方法
new(x,y) # 在方法内部调用new方法
end

def Point.polar(r, theta) # 创建另一种类型的Point对象
new(r*Math.cos(theta), r*Math.sin(theta))
end
end

No comments: