2012-05-11 15 views
1

私はシンプルなオーダーシステムを作ろうとしています。それは割り当てであるため、DBとGUIを作ってはならないというデリミタですが、少なくとも4つのデザインパターンを実装する必要があります。私の決定の1つはファサードを使用することでした。私の知る限り理解してファサードクラスは、コントローラの一種であり、これは私がこれまで持っているものです。Javaデザインパターン:ファサード

package model; 

import java.util.ArrayList; 

public class Facade { 
ClientsList clients; 
OrdersList orders; 
ProductsList products; 
ArrayList<Orders> orderlist; 
public Facade() { 
    clients = new ClientsList(); 
    orderlist=new ArrayList<Orders>(); 
    orders = new OrdersList(orderlist); 
    products = new ProductsList(); 

} 

public int ClientsSize() { 

    return clients.size(); 
} 

public int OrdersSize() { 

    return orders.size(); 
} 

public void addClients(Clients client) { 
    clients.add(client); 

} 

public void addOrders(Orders order) { 
    orders.add(order); 
} 

public void removeClients() { 
    clients.remove(); 

} 

public void removeOrders() { 
    orders.remove(); 

} 

public String next() { 
    return orders.it(); 
} 
} 

私のモデルパッケージ内の他のクラスが受注している、OrdersList、クライアント、Clientslist、製品とProductsListとで*リストクラス私は、情報をArrayListに保持しています。だから私の質問は:このコードはファサードですか?

答えて

0

ファサードの目的は、特定のコンポーネントの機能の実装を保護することです。ファサードは、通常、「外の世界」へのインターフェースを提供します。私はあなたのコードの残りの部分を知らないが、上記の例のファサードになる可能性があります。

ソーシャルメディアからメッセージを取得するコンポーネントを構築しているとします。ソーシャルメディアのソースに関係なく、(明らかに)メッセージのリストを返すメソッド 'GetMessage(文字列キーワード)'でファサードを構築することができます。このコンポーネントのクライアントは気にしませんコンポーネントはソーシャルメディアからデータを取得します。 「SearchFacebook」や「SearchTwitter」のようなメソッドは、クライアントがこれらのメソッドを呼び出すことに関心がないため、非表示にすることができます。しかし、 'GetMessages'はそれらを使ってFacebookやTwitterを検索し、その2つの結果のリストを作成してクライアントに返します。別の良い例

、Wikiページをチェック:ファサードのhttp://en.wikipedia.org/wiki/Facade_pattern

0

意図:

  1. は、サブシステム内のインタフェースのセットに統一されたインタフェースを提供します。ファサードは、サブシステムを使いやすくするための高水準インターフェースを定義しています。

  2. より簡単なインターフェイスで複雑なサブシステムをラップします。

あなたが提供している機能は上記のポイントと一致していますので、私の見解ではファサードです。

例では、Facadeを介してサブシステム(OrdersList、ProductsList)機能を公開しています。

1

ファサードは、私が特定のクラスとそれらが実装する操作について知ることを妨げることになっています。あなたの例では、私はClientListについて知る必要はないかもしれませんが、クライアント、製品、および注文について知る必要があります。それらのクラスが私から離れて隠されていたら、ファサードと話すだけでいいです。開発者が自分のファサードの実装で動作するように持っていけないので、

1

は、追加のインタフェースを書く:あなたのコードで

public interface OrderService { 
    //methods your co-developers should be able to use 
} 

public class Facade implements OrderService { 
    //methods your co-developers dont want to know about 
} 

はインターフェースではなく独自の実装を使用します。

+0

を読んで、ファサードのデザインパターンについての詳細な知識を得るために。そうでなければ、重要なOOプリンシプルです。それに言及するため+1。たとえば、http:// sourcemakingです。com/design_patterns/facade/java/1 –

0

奇妙なことは、私もこれに言及せずFacadeパターンを説明し、いくつかの例や本を見てきたということである「ヘッドファーストデザインパターン」

関連する問題