トップへ戻るニュースフォーラムFLASH-ML 過去ログBak@Flaダウンロードよくある質問と答
ログイン
ユーザ名:

パスワード:


パスワード紛失

新規登録
メインメニュー
メイン
   コーダーズルーム【スクリプト系】
     デザインパターンの使いどころ
投稿するにはまず登録を

スレッド表示 | 古いものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
ペコ
Åê¹ÆNo.33077
投稿日時: 2007-4-20 19:37
新米
居住地: 埼玉一歩手前
投稿: 19
使用環境:
WinXP,Flash MX2004pro
Flashout,ASDT,MTASC,Eclipse
PDT
Re: デザインパターンの使いどころ
こんにちは。

僕は、
増補改訂版Java言語で学ぶデザインパターン入門
で勉強しています。

参考になれば
miyaj
Åê¹ÆNo.32820
投稿日時: 2007-4-9 0:00
新米
居住地:
投稿: 13
使用環境:
Win7
FlashCS5
Re: デザインパターンの使いどころ
私も、これからGOFデザインパターンを勉強しようと考えているところです。
そこで、GOFデザインパターンを1から勉強する上で、
良い書籍やサイトがありましたら教えていただきたいです。
ちなみに、私はActionScriptとJavaScriptくらいしか使えません。
ActionScriptでは一応、独学と野中先生の「オブジェクト指向で考える・・・」
で勉強させていただき、クラスを作成してのスクリプティングは
一通り理解しているつもりです。
野中文雄
Åê¹ÆNo.32709
投稿日時: 2007-3-31 3:17
ちょんまげら
居住地: 東京
投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1)
Re: デザインパターンの使いどころ
Mix-in の概要」が参考になるでしょう。私のサイトでは、mix-inの例として、EventDispatcherクラス([*8])と ExternalContentクラス(「4. ExternalContentクラスの処理」)をごく簡単に紹介しています。
引用:
ペコさんは書きました:
mixed-in。。。なんだか知らない単語でびびってます。
インターフェイスとはちょっと違うようですね・・・。
勉強してみます。


----------------
 

橋本 亮介
Åê¹ÆNo.32706
投稿日時: 2007-3-31 1:45
新米
居住地:
投稿: 6
使用環境:
Re: デザインパターンの使いどころ
おんなじ様な感じですが、シングルトンでなくスタティックに実装することもできますよ。Mixed-inも同時に学べます。
フルスクリーンだと頻繁に左右上、左右下、の位置を算出しますが、いろいろなところでStageクラスにリスナー登録すると計算をいろいろなところに書かなければならないので一括でやってしまおうというクラスです。

import mx.events.EventDispatcher;
class IndexWindowSize{
static private var l:Object;
static private var sts:Object;
static private var el:Object;
static public function init(w:Number,h:Number){
if(!el){
el = new Object();
el.onResize = function(){
IndexWindowSize.setWindowSize();
}
Stage.scaleMode = "noScale";
Stage.addListener(el);
l = new Object();
EventDispatcher.initialize(l);
}
sts = {sW:Stage.width,sH:Stage.height,cW:w,cH:h};
sts.t = (sts.cH-sts.sH)/2;
sts.r = sts.cW+(sts.sW-sts.cW)/2;
sts.b = sts.cH+(sts.sH-sts.cH)/2;
sts.l = (sts.cW-sts.sW)/2;
}
static public function addListener(o:Object):Void{
l.addEventListener("onResize",o);
}
static public function removeListener(o:Object):Void{
l.removeEventListener("onResize",o);
}
//status
static public function setWindowSize():Void{
sts.sW = Math.max(Stage.width,sts.cW);
sts.sH = Math.max(Stage.height,sts.cH);
sts.t = (sts.cH-sts.sH)/2;
sts.r = sts.cW+(sts.sW-sts.cW)/2;
sts.b = sts.cH+(sts.sH-sts.cH)/2;
sts.l = (sts.cW-sts.sW)/2;
dispatch();
}
static public function callEvent(o:Object){return o.onResize({type:"onResize",windowSize:sts});}
static public function getWindowSize():Object{return sts;}
static private function dispatch(id:Number){l.dispatchEvent({type:"onResize",windowSize:sts});}
//
}

//---------------------------------------------------
上記のクラスの使い方
必ずinitでステージの縦横を設定します。

IndexWindowSize.init(800,600);

で、あらかじめ
IndexWindowSize.addListener(this);

そうすると
this.onResize(sts:Object){
var o = sts.windowSize;
trace([o.sW,o.sH]);//Stageの幅、高さ
trace([o.t,o.b]);//上下のy座標
trace([o.r,o.l]);//左右のx座標
}
※ここではStageの幅と高さがもとのステージの大きさより小さくならないようにMath.maxするように設定しています。(そういう場合が多いので。。)


さらにIndexWindowSize.callEvent(this);
でthisだけにonResizeイベントが起こせます。これを使って初期設定ができます。

EventDispatcherを利用してStageクラスをラップした感じですね。

参考ください。





>>追記
イテレータはフラッシュの場合MCが入れ子になっているので、プログラムを使用しなくてもいいケースが多いから使いどころが見つからないんでしょうね。


----------------
--
Dyo

ペコ
Åê¹ÆNo.32705
投稿日時: 2007-3-31 0:55
新米
居住地: 埼玉一歩手前
投稿: 19
使用環境:
WinXP,Flash MX2004pro
Flashout,ASDT,MTASC,Eclipse
PDT
Re: デザインパターンの使いどころ
せっかくなので僕がよく使うパターンを
残したいと思います。
稚拙なコードですがご勘弁を・・・・。

【Observerパターン】
ステージには
・halfWidth_mc
・halfHeight_mc
二つのムービークリップインスタンスを置きます。
それぞれのシンボルには
・HalfWidthクラス
・HalfHeightクラス
をAS2.0クラスとしています。この二つのクラスは
Observerインターフェイスを実装しています。

Stage.onResize()を取得するクラス(Subjectクラス)
をSingletonパターンでつくり
addObserver()メゾットでObserverを追加します。
addObserver()の引数の型をObserver型とします。

Subjectクラス(Subject.as)

class Subject
{
  private static var instance:Subject = null;

  private var observers:Array = new Array();

  public static function getInstance():Subject
  {
    if (instance == null) {
      instance = new Subject();
    }

    return instance;
  }

  private function Subject()
  {
    Stage.align     = "TL";
    Stage.scaleMode = "noscale";
    Stage.addListener(this);
  }

  public function onResize():Void
  {
    var observers:Array = this.observers;
    var length:Number = observers.length;
    var w:Number = Stage.width;
    var h:Number = Stage.height;
    for (var i:Number = 0; i < length; i++) {
      observers[i].update(w, h);
    }
  }

  public function addObserver(observer:Observer):Void
  {
    this.observers.push(observer);
  }
}


Observerインターフェイス(Observer.as)

interface Observer
{
  public function update(w:Number, h:Number):Void;
}


HalfWidthクラス(HalfWidth.as)
HalfHeightクラス(HalfHeight.as)

class HalfHeight extends MovieClip implements Observer
{

  public function HalfHeight()
  {
    var subject:Subject = Subject.getInstance();
    subject.addObserver(this);
  }

  public function update(w:Number, h:Number):Void
  {
    var halfHeight:Number = Math.floor(h / 2);

    this._height = halfHeight;
  }
}

class HalfWidth extends MovieClip implements Observer
{

  public function HalfWidth()
  {
    var subject:Subject = Subject.getInstance();
    subject.addObserver(this);
  }

  public function update(w:Number, h:Number):Void
  {
    var halfWidth:Number = Math.floor(w / 2);

    this._width = halfWidth;
  }
}


ステージに置いた二つのMCが
ステージの大きさを変更すると
それぞれステージの高さ・幅の半分の大きさに変わります。

こうすると、Stageに関する記述が一箇所にまとめられ
便利です。

参考になれば幸いです。
ペコ
Åê¹ÆNo.32704
投稿日時: 2007-3-30 23:13
新米
居住地: 埼玉一歩手前
投稿: 19
使用環境:
WinXP,Flash MX2004pro
Flashout,ASDT,MTASC,Eclipse
PDT
Re: デザインパターンの使いどころ
>ながながいさん
やっぱり言語によって使いやすいパターン
使いづらいパターンってのがあるんでしょうかね?

Interpreterパターンのつかいどころも判りません
ペコ
Åê¹ÆNo.32703
投稿日時: 2007-3-30 23:07
新米
居住地: 埼玉一歩手前
投稿: 19
使用環境:
WinXP,Flash MX2004pro
Flashout,ASDT,MTASC,Eclipse
PDT
Re: デザインパターンの使いどころ
>橋本さん
引用:

ObserverパターンはEventDispatcherクラスをmixed-inして使っています


mixed-in。。。なんだか知らない単語でびびってます。
インターフェイスとはちょっと違うようですね・・・。
勉強してみます。

ありがとうございました。
ながながい
Åê¹ÆNo.32640
投稿日時: 2007-3-25 23:12
半人前
居住地: 京都
投稿: 30
使用環境:
WindowsXP SP2,
Flash CS3, Flash8
Re: デザインパターンの使いどころ
独学ではありますが、僕が使うのは↓↓ですかね。
って、ペコさんが挙げたのと全部同じですけど

■ Singleton
インスタンスが1つだけであるときを保証したいとき、
例えば、重要なサーバー通信を行うインスタンス、に適用させてます。
簡単な具体例ですと、GoogleAnalyticsなどのアクセス解析に接続するクラスですね。

■ Template Method
似て非なるMCシンボルを作るときに使ってます。
ベースは同じだけど、メソッドの細部が異なっていたり、とか。

■ Observer
自作MCがイベントを配信するときに使います。
って、ふだんデフォルトのFlashのクラスでもたくさん使いますが

■ Mediator
複雑なボタンを管理するときに使ってます。
ユーザーインタフェース構築の時にうってつけかな?と思ってます。
ただ、わざわざクラス作って実装するのがめんどくさくて、
複数のボタンMCをまとめたMCを相談役としてます。



他のデザインパターンも使ってみたいんですが、なかなか難しいですね。
ちなみに僕はいまだに、Iteratorパターンの有効な使いどころがわかりません

橋本 亮介
Åê¹ÆNo.32611
投稿日時: 2007-3-23 21:52
新米
居住地:
投稿: 6
使用環境:
Re: デザインパターンの使いどころ
SingletonはMVCでいうモデルによく使っています。
ObserverパターンはEventDispatcherクラスをmixed-inして使っています。非常に便利なので必ず利用します。
Mediatorは一度大きなプロジェクトに使用して失敗しているので嫌いです。

まぁ。具体的ではないですが。。


----------------
--
Dyo

ペコ
Åê¹ÆNo.32525
投稿日時: 2007-3-16 23:37
新米
居住地: 埼玉一歩手前
投稿: 19
使用環境:
WinXP,Flash MX2004pro
Flashout,ASDT,MTASC,Eclipse
PDT
デザインパターンの使いどころ
せっかくoopなActionScriptなので、GOFデザインパターンの勉強中です。AS3は触ったことないのでAS2ですが・・・・。

皆さんにお聞きしたいのが、
・このパターンはこんな場面に便利!
・このパターン無しではやっていけない!
・テキトーに組むとこのパターンになっちゃう
などはありますでしょうか?

僕がよく使うのは
■Singleton
ターゲットの階層を考えないで、ターゲットパスが取れる

■Template Method
「タブ」とか「ウィンドウ」とかある程度同じなんだけど
微妙に動作がちがう。その微妙さを作れる

■Observer(Mediator?)
Stage.onResize()を通知するのに必ず使います。

こんなもんでしょうか・・・・・・・
と、ここまで書いて
具体例が必要かも・・・・・とか思うかも・・・

とにかくAS2におけるデザインパターンの
皆様の使い方を教えてください。

宜しくお願いします。
スレッド表示 | 古いものから 前のトピック | 次のトピック | トップ

投稿するにはまず登録を
 
Copyright (C) 2003 FLASH-japan. All rights reserved.
Powered by Xoops