Hatena::Groupcadr

わだばLisperになる このページをアンテナに追加 RSSフィード

2004 | 12 |
2005 | 01 | 02 | 07 | 10 | 11 |
2006 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2007 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2008 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2009 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2010 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2011 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 11 |

2008-12-19

CLとデザインパターン - Facade

| 20:10 | CLとデザインパターン - Facade - わだばLisperになる を含むブックマーク はてなブックマーク - CLとデザインパターン - Facade - わだばLisperになる

今回は、Facadeパターンです。

代表するクラスを作成して処理を集約しようというパターンのようです。

しかし、それだけだと何にでも当てはまってしまいそうなのですが、どうもそういうパターンのようです。

CLの場合、クラスを使わなくても関数で纏めたり、マクロで纏めたり色々できるかもしれません。

(defclass a1 () ())
(defclass a2 () ())
(defclass a3 () ())

(defgeneric do-someting1 (c))
(defgeneric do-someting2 (c))
(defgeneric do-someting3 (c))

(defmethod do-someting1 ((c a1))
  (print "a1"))
(defmethod do-someting2 ((c a2))
  (print "a2"))
(defmethod do-someting3 ((c a3))
  (print "a3"))

(defclass facade () ())

(defgeneric do-someting (c))
(defmethod do-someting ((c facade))
  (let ((a1 (make-instance 'a1))
        (a2 (make-instance 'a2))
        (a3 (make-instance 'a3)))
    (do-someting1 a1)
    (do-someting2 a2)
    (do-someting3 a3)))

;; 試してみる
(do-someting (make-instance 'facade))

;-> "a1" 
;   "a2" 
;   "a3" 
;=> "a3"

ゲスト



トラックバック - http://cadr.g.hatena.ne.jp/g000001/20081219