〔隔離〕デザインパターンは本当に必要か?〔スレ〕
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2005/06/21(火) 19:09:560232デフォルトの名無しさん
2005/06/25(土) 00:20:00すべきタイミングと、実際に消していいタイミングは必ずしも一致しない」
(通常後者のほうが遅い)
ということに尽きるのかな。
一言で言えるんだから、一言で言えばいいのに。
0233デフォルトの名無しさん
2005/06/25(土) 00:21:35Singletonの生成にはコンストラクターを使わない。つまり、getInstance()とかで生成する。
Factoryの目的は、どのサブクラスのインスタンスを生成するか、という点を抽象する事にある。
0234デフォルトの名無しさん
2005/06/25(土) 00:24:05static object m_Foo;
static object m_Bar;
static object getFoo() { return m_Foo; }
static object getBar() { return m_Bar; }
}
ではなぜまずいのでしょうか
getInstance()とかいちいちウザいです
0235デフォルトの名無しさん
2005/06/25(土) 00:30:390237デフォルトの名無しさん
NGNG注意点は一言で言えるが実装は一言で言えないぜ。
0238デフォルトの名無しさん
2005/06/25(土) 00:39:54流石に実装まで示せとは誰も言ってないじゃまいか。
0239デフォルトの名無しさん
2005/06/25(土) 00:41:23もう、日本は終わったんだよw
0241234
2005/06/25(土) 00:49:32てへ
0242デフォルトの名無しさん
2005/06/25(土) 00:53:55俺はアンチなんだけど
それって実体はいつできるんだ?
呼び出す前からできちまってる気がしねぇ?
0243234
2005/06/25(土) 00:56:37つか、それだけの問題で
まいかい
Singleton timpo = Singleton.getInstance();
bokkiage = timpo.invoke();
とかやるのはいやです。
0244デフォルトの名無しさん
2005/06/25(土) 00:57:060245デフォルトの名無しさん
2005/06/25(土) 00:57:15華麗なる素人スレ
0246デフォルトの名無しさん
2005/06/25(土) 00:58:12bokkiage = (Singleton.getInstance()).invoke();
0247デフォルトの名無しさん
2005/06/25(土) 00:59:32仮想コンストラクタで検索。
一般に、クライアントコードが簡素になる点と
融通が効く点が利点して上げられてる。
0248デフォルトの名無しさん
2005/06/25(土) 01:00:36それじゃおめ、
そうやって組んだしんぐるトンは通る可能性のあるものに関しては実行時にすべて生成されてしまうわけだな?
つ 逝ってよし
0249234
2005/06/25(土) 01:02:39継承を考えてなんとなく柔軟性を持たせたいというのは分かりますが
実際には、継承なんかしないクラスこそシングルトンの候補であることが
非常に多い気がします。
その場合には、闇雲にシングルトンにせずとも構わないんでしょうかね。
「クライアントコードが簡素に成る」については全く納得がいきません。
メンバがstaticであれば
(Singleton.getInstance()).invoke();
ではなく
Singleton.invoke();
と書けるでしょう。
0250デフォルトの名無しさん
2005/06/25(土) 01:04:500251デフォルトの名無しさん
2005/06/25(土) 01:06:04重箱の隅しか突付けない哀れな煽りだ
0252234
2005/06/25(土) 01:07:000253デフォルトの名無しさん
2005/06/25(土) 01:07:14このスレは厨房を隔離するための隔離スレです。。。
======================================================================
0254デフォルトの名無しさん
2005/06/25(土) 01:07:540255デフォルトの名無しさん
2005/06/25(土) 01:16:10お前はネタw
0256デフォルトの名無しさん
2005/06/25(土) 01:20:06インベーダーの例に戻って言うと、当初のスコアシステムに
ハイスコアの記録機能を追加した新スコアシステムを作る
場合、継承するのが妥当なんじゃない?
0259デフォルトの名無しさん
NGNG0260234
2005/06/25(土) 01:26:34それは、いわゆるUtilityクラスのような、状態の存在しないものですね。
それについて異存のあるひとはいないとおもいます。
ぼくがいっているのは、状態が存在するが、システムでユニークなクラス
のことです。とゆうか、Singletonというのは、そのようなものでしょ?
0261234
2005/06/25(土) 01:27:07ちょっとはしょりすぎた
すみません、酔っているので
0262デフォルトの名無しさん
2005/06/25(土) 01:27:20Foo foo = Singleton.getFoo();
Bar bar = Singleton.getBar();
Foo foo = Singleton.getInstance("Foo");
Bar bar = Singleton.getInstance("Bar");
後者の方が簡素というか、動的に生成物を変更するのが楽。
0263デフォルトの名無しさん
2005/06/25(土) 01:30:31・コンフィギュレーション選択用の定数か、
・コンフィギュレーションを表すオブジェクト
を渡すべき
0264デフォルトの名無しさん
2005/06/25(土) 01:32:54それは「グローバル変数」だ。悪。
シングルトンでは「状態のないもの」を表現する。
たとえば、「ストラテジーパターン」で使うストラテジーオブジェクトとか、
「ステートパターン」で使うステートオブジェクトとか。
「ファクトリー」もそうだ。
0265デフォルトの名無しさん
2005/06/25(土) 01:34:21オブザーバーパターンとのかみ合わせを考えてみて。
public class Enemy {
addObserver(ScoreSystem ss) {}
}
↑こうなってた場合、継承が必要。
public interface Observer {}
public class Enemy {
addObserver(Observer observer){}
}
↑こうしとかないオマイが馬鹿と言われれば、だよね〜
としか言い様がない気もするが・・・・・・
0266234
2005/06/25(土) 01:34:27え?
ぼくの認識では、メンバ変数はすべからく「状態」だと思っているのですが
間違いですか?
なんか、ちょっとはつみみな所見です。
0267234
2005/06/25(土) 01:36:31いやその、共存する必要が無いのであれば、インタフェースを変えずに
スコアシステムの「実装」を変えればいいだけなのではないかと。
なにか勘違いしていますか?ぼくは
0268234
2005/06/25(土) 01:37:33それはちょっとSingletonといいつつFactory風でもありますね。
そういうニーズがある場合には、確かに意義がある気がします。
あまりそういうケースが多くは無い気はしますが。
0269デフォルトの名無しさん
2005/06/25(土) 01:40:49そろって馬鹿だな。
デザパタとか別にしても。
0270259
NGNGいまいちやりたいことが分からないなぁ…。
Singletonが1種類のオブジェクトしか返さなくて、
将来その仕様に変更がないと言い切れるなら
いっそ状態もstatic管理でいいと思う。要するにSingleton不要。
デザパタは仕様変更に柔軟に対応するための手段だと思うから。
0271デフォルトの名無しさん
2005/06/25(土) 01:42:57このスレ読んでると、どんどん悪い癖、迷信に染まっていく傾向があるな。
状態はグローバル変数だから駄目?
それはあんたの信念であって、広く認められているSingletonの定義より狭いやん。
例えばアプリケーションの設定を Singletonに置くとして、
設定を変更する事は充分ありえる。つまり、Singletonに状態を持たせる事は充分有り得る。
GoF日本語版 p138
◎結果
Singletonパターンの効果を次にあげる。
1.インスタンスへのアクセスを制御する。(詳細略:唯一のインスタンスなのでアクセスチェックが簡単)
2.名前空間を減らす。Singletonパターンはグローバル変数の改良である。唯一のインスタンスを格納するグローバル変数 (注: C++, Smalltalk)を宣言する必要はなくなる。
3.オペレーションや内部表現を詳細化できる。(詳細略:Singleton のサブクラス化に関する話)
4.インスタンスの数を変えることができる。(詳細略:インスタンス数を2つ以上に変更する事も容易)
5.クラスオペレーションよりも柔軟である。(詳細略)
0272デフォルトの名無しさん
2005/06/25(土) 01:43:38Visitorが状態を持たないとき、
それでもオマイさんは
Visitorをnewしますか?
0273234
2005/06/25(土) 01:43:59いやその、「仕様変更」に対するデフォルトの対応が「継承」である、
というほうがぼくにとっては不自然なのですが。
たとえばオブジェクトのシリアライズ方式がv1とv2で変わっていて
両者に対応しなければならない、とかいうケースであれば、継承を
使うのは理解できます。
しかし、そもそも「唯一」であったものに、「継承」を適用するケース
って、そんなに多いのかな、と。普通、継承は、複数のものの差異を
選択的に無視したい場合に用いますよね。単純化のしすぎですが。
0274デフォルトの名無しさん
2005/06/25(土) 01:45:29つまりさ、このスレの白熱議論っつうのは、
すべからく >>264みたいな素人の迷信暴言が発端なわけ。
くだらねぇんだよおまぃらの議論は
0275デフォルトの名無しさん
2005/06/25(土) 01:45:47GoF本にはそんなこと書いてなかったけど
一体いつ定義されたの?
0276234
2005/06/25(土) 01:45:570277デフォルトの名無しさん
2005/06/25(土) 01:46:13面白い議論キボン
0278デフォルトの名無しさん
2005/06/25(土) 01:46:26恥を知れクズが
0279234
2005/06/25(土) 01:46:38ぼくのほうが素人だもん
とか書こうとしたのに
0280デフォルトの名無しさん
2005/06/25(土) 01:48:33かかってこいよ厨房w
0281デフォルトの名無しさん
2005/06/25(土) 01:48:39おまぃは誤爆してる上、
>>234の定義で>>243するとNullPointerExceptionがおきるつう認識もない・・・
・・・Singleton書いた事あるぅ?(>>262を参照汁)
0282デフォルトの名無しさん
2005/06/25(土) 01:49:13差分プログラミングと開放/閉鎖原則で検索。
0283デフォルトの名無しさん
2005/06/25(土) 01:49:470284234
2005/06/25(土) 01:50:29あ、>>234の例はただの非常に単純化した例ですので。
いいたいことは、メンバを全てstaticで実装し、初期化はstaticコンストラクタ
で行うようなクラスをSingletonの変わりにして何かまずいのか?
ということに過ぎません。
0285デフォルトの名無しさん
2005/06/25(土) 01:51:100286234
2005/06/25(土) 01:52:42メイヤー先生ですか。
私としては、もう使いもしないv1のコードが残っているのは違和感を感じますがね。
それに、元のデザインが非常によくできていて、適切なフックなどが容易されていない
限り、継承してメソッドをオーバーライドするより元のメソッドそのものを
書き換えることのほうが容易であることも多い気がします。
0287234
2005/06/25(土) 01:53:59どれぐらい一般的なんでしょうか?
もとのクラスを書き換えるのは、邪悪?
open/close原則を厳密に適用すれば、そういうことになってしまいますね。
0288デフォルトの名無しさん
2005/06/25(土) 01:54:51好きにすりゃえーやん。
漏れは藻舞を説得するつもりはねぇ〜し
0290デフォルトの名無しさん
2005/06/25(土) 02:00:01アンチの俺から言わせると、
一般的なわけねーだろ。
あきらかに継承の使い方を間違ってる上に悪用としかいいようがない。
アホだアホ。マジで救いようがねー。
0291デフォルトの名無しさん
2005/06/25(土) 02:03:49煽れる時に煽るだけで、
中身は空っぽだもんな、おまえ
0292デフォルトの名無しさん
2005/06/25(土) 02:04:28仮想コンストラクタはファクトリとシングルトンの合わせ技だから
ニーズは普通にあると思うよ。
オセロの例に戻ると、プレーヤーを動的に変更したいというのは自然でしょ?
0293234
2005/06/25(土) 02:04:400294デフォルトの名無しさん
2005/06/25(土) 02:05:42オマエモナーw
0295デフォルトの名無しさん
2005/06/25(土) 02:06:351つのクラスが複数のstaticメンバ変数を管理するのはいくない。
0296234
2005/06/25(土) 02:07:54ニーズは、あるでしょうね。
ぼくは、実はSingletonでなくていいのに
「いまどきSingletonじゃないと、女のコにモテないぞ」
「グローバル変数はダサ!Bjarne stroustrupが何と言おうと絞め殺せ」
「static記憶クラス?そんなん、石器時代の遺物でしょ?」
とかそんな理由でSingletonにされているケースも、結構おおいんじゃないの?
と、そういいたかっただけです。
0298デフォルトの名無しさん
2005/06/25(土) 02:08:44文体と主張だけで彼は特定できる。
だから、スルーして淡々と進めてるだろ?お前さんもスルーするよろし。
0299デフォルトの名無しさん
2005/06/25(土) 02:10:45http://pc8.2ch.net/test/read.cgi/tech/1119158274/l50
ここでデザパタを使う前提の話をするな。
ここはデザパタの存在の可否を決めるスレだ。
#大体、デザパタなんて誰も使ってないんだから過疎スレで
#まとまってろってのw
#アンチをこっちに隔離したとかほざいてたくせにアンチ追い出したら
#ただの過疎スレになってやんのwバーカw
0300デフォルトの名無しさん
2005/06/25(土) 02:11:45ここじゃ荒らしはお前の方なのw
わかったらさっさと過疎スレ帰れよw
0301デフォルトの名無しさん
2005/06/25(土) 02:12:20クラスの役割が訳わかんなくなるから。
0302デフォルトの名無しさん
2005/06/25(土) 02:13:14哀れな奴
0303デフォルトの名無しさん
2005/06/25(土) 02:13:38ヒント:スルー
0304デフォルトの名無しさん
2005/06/25(土) 02:14:54本気で帰ってよ。
デザパタ語るなら向こうが本スレだからw
0305234
2005/06/25(土) 02:15:01ぼくは頭が悪いので、やはりそれでは理解できませんね。
確かに全てをstaticで実装すれば、クラスはただのグローバル変数+関数と
それをつつむnamespaceに同等のものになるでしょう。
で、それが何か問題なのですか?
0306デフォルトの名無しさん
2005/06/25(土) 02:16:01>何か問題なのですか?
だからここはデザパタの可否を決めるスレだっつってんだろ!
荒らしが!
0307デフォルトの名無しさん
2005/06/25(土) 02:18:16だいたい、何、頭に血上らせて必死におばかな議論してんだ、厨房。
グローバル変数を1つも使わないプログラムとかみたことないのか?
使ってる時点でレベル低すぎだってのにいらいらすんだよ。
お前みたいな馬鹿みてると。
0308デフォルトの名無しさん
2005/06/25(土) 02:18:25わざわざSingletonが当てはまらない想定を持ち出して煽ってるんだから、
別にSingleton勧めるいわれはないじゃん。
>>234もそろそろ初心者プログラミング相談室にでも相談してみたらどう?
0309234
2005/06/25(土) 02:19:24「1コのstaticメンバならOKだが、複数だとNGになる」
という理由です。
そこのところをもう少し分かりやすく説明していただけませんか。
寡聞にして聞いたことの無い主張なものですから。
0310デフォルトの名無しさん
2005/06/25(土) 02:19:33Singletonはグローバル変数の代わりをスコープに入れている。
つか、Javaじゃグローバル変数なんてないし。
0311デフォルトの名無しさん
2005/06/25(土) 02:19:46そういうことすると、そのクラスが何してるか(何を管理しているクラスなのか)、
後から見た人はわかんないでしょ。コード追っていかないと。
だからクラスの役割ははっきりさせる必要がある。
0312デフォルトの名無しさん
2005/06/25(土) 02:19:53利点もあるし、難点もあるな>継承
Javaなんかだと、最近は継承よりも委譲とインターフェイスを
優先する風潮がある。
ソースの書き換えは、規模が大きくなると変更が他の部分に
影響を与えてドタドタドタっとドミノ倒しになる事がある。
それじゃあ継承ならそうならないかって言うと、まぁそうとも言
い切れんわけだが・・・・・・
まっ、それでinterfaceを多用する風潮が生まれたんだろう。
これならインターフェイスのみを残して新しく書き起こす場合
でも、継承を利用する場合でも、変更部分を局所化できる。
0313234
2005/06/25(土) 02:20:50いやその、パラメタライズされていないgetInstance()を使う
Singletonの例は多いと思うのですが。
パラメタライズされている場合については、了解しました
と言っておきましょう。
0314デフォルトの名無しさん
2005/06/25(土) 02:21:03>Javaなんかだと、最近は継承よりも委譲とインターフェイスを
>優先する風潮がある。
Java「なんかだと最近」?はぁ?
最初っからそうだよ厨房
0315デフォルトの名無しさん
2005/06/25(土) 02:21:24はぁ?デザパタ信者ってのは、
グローバル変数の何がまずいのか知らないのか?
アホだな。レベルが低すぎる。
もうちょっと勉強してきてくださいよw
0316234
2005/06/25(土) 02:22:28>>309に答えていただけませんか。やはりよくわからないんですが。
なぜstatic変数が吹く数字なると
「後から見た人はわかんない」ようになるのか。
0317デフォルトの名無しさん
2005/06/25(土) 02:23:050318デフォルトの名無しさん
2005/06/25(土) 02:24:00俺も聞いておきたい。つか、ネタかローカルルールだと思っている。
0319デフォルトの名無しさん
2005/06/25(土) 02:24:11ほら、本スレに逃げ込めよw
0320234
2005/06/25(土) 02:24:23ぼくがinterfaceに対するプログラミングの一番の恩恵を認識したのは
実はC++のリンク互換性なんですがね。
COMの発想のベースはそこにあります。大変汚いものですが。
0321デフォルトの名無しさん
2005/06/25(土) 02:25:200323デフォルトの名無しさん
2005/06/25(土) 02:26:57実は、Singletonってインスタンスが2つ以上あってもいいんだよね。
つか2つ以上生成した時点で、狭義のSingletonとは見なされない傾向があるが。
例えば某所で話題になっていたInstance PoolとかConnection Poolみたいなパターンになっちまう。
0324デフォルトの名無しさん
2005/06/25(土) 02:27:55だからどうしたんだよ。余計なレスつけんなアホ。
0326デフォルトの名無しさん
2005/06/25(土) 02:31:24お。冴えてるやん。
すると、ダンマリ決め込んでる>>311が回答すべき内容が見えてくる・・・はず・・・なんだが・・・なんともはや
0327デフォルトの名無しさん
2005/06/25(土) 02:32:05デザパタとか関係なく好き嫌いの問題でしょ、単に。
漏れは嫌だけど。
↓こんなコード書いてくるチームメンバがいたらはったおしてやるけどね。
class Sigleton
{
private static Object A;
private static Object B;
・・・
private static Object Z;
static{
A = new Object();
B = new Object();
・・・
Z = new Object();
}
static public Object getA(){ return A;}
static public Object getB(){ return B;}
・・・
static public Object getZ(){ return Z;}
}
0328デフォルトの名無しさん
2005/06/25(土) 02:32:55こんなのがコミュニケーションツールでいいんですか?>デザパタ
人によって使い方違ってるじゃないですか?>デザパタ
職場でもこんな戦いをしなきゃいけないんですか?>デザパタ
0329326
2005/06/25(土) 02:33:17また訳わかんない主張系の人が、スレを混沌に導く・・・・・・もう飽きたから寝る。
0330デフォルトの名無しさん
2005/06/25(土) 02:33:49つか、マジで本スレ帰れってw
0331デフォルトの名無しさん
2005/06/25(土) 02:34:50お れ の せ い に な る の は な に か ち が う き が す る ! (笑)
■ このスレッドは過去ログ倉庫に格納されています