module Door def getWidth end def getHeight end end class WoodenDoor include Door attr_reader :width, :height def initialize(width, height) @width = width @height = height end def name "木製のドアです。" end end class DoorFactory def self.makeDoor(width, height) WoodenDoor.new(width, height) end end door = DoorFactory::makeDoor(100, 200) puts door.width puts door.height puts door.name
simple factoryパターンは、クライアントが必要とするインスタンスを生成するもの。このとき、インスタンス生成ロジックはクライアントから見えないようにうまく隠しておきます。
WoodernDoorを生成する前に何かロジックを加える必要がある場合はこのようにファクトリーで隠蔽するのが良い。コードを書く人はDoorFactoryに引数渡すと後はなんか知らんけどちゃんとしたドア返ってくるわぐらいの感覚でいられる。