1

簡単な注文システムを作ろうとしています。これは割り当てであるため、DBとGUIを作成するべきではない境界ですが、少なくとも4つのデザインパターンを実装する必要があります。私の決断の1つは、Facadeを使用することでした。私が理解している限り、Facadeクラスは一種のコントローラーであり、これは私がこれまでに持っているものです:

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();
}
}

モデルパッケージの他のクラスは、Orders、OrdersList、Clients、Clientslist、Products、ProductsListであり、*ListクラスではArrayListに情報を保持しています。だから私の質問は:このコードはファサードですか?

4

5 に答える 5

1

ファサードは、特定のクラスとそれらが実装する操作について知ることから私を保護することになっています。あなたの例では、ClientList について知る必要はないかもしれませんが、Client、Product、および Order について知る必要があります。これらのクラスが私から離れて隠されているとよいので、ファサードと話すだけで済みます。

于 2012-05-11T12:04:08.930 に答える
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
}

コードでは、impl ではなくインターフェイスを使用します。

于 2012-05-11T13:00:37.310 に答える
0

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

ソーシャル メディアからメッセージを取得するコンポーネントを作成しているとします。ソーシャル メディア ソースに関係なく、(明らかに) メッセージのリストを返すメソッド 'GetMessage(string keyword)' を使用してファサードを構築できます。このコンポーネントのクライアントは、コンポーネントがソーシャル メディアからデータを取得する方法を気にせず、ただメッセージが欲しいだけです。クライアントはこれらのメソッドの呼び出しに関心がないため、'SearchFacebook' や 'SearchTwitter' などのメソッドを非表示にすることができます。ただし、'GetMessages' はそれらを使用して Facebook と Twitter を検索し、これら 2 つの結果のリストを作成してクライアントに返すことができます。

別の良い例については、wiki ページを確認してください: http://en.wikipedia.org/wiki/Facade_pattern

于 2012-05-11T11:21:33.983 に答える
0

ファサードの意図:

  1. サブシステム内の一連のインターフェイスに統一されたインターフェイスを提供します。Facade は、サブシステムを使いやすくする上位レベルのインターフェイスを定義します。

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

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

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

于 2012-05-11T11:31:44.793 に答える
0

ファサードのデザイン パターンについてさらに知識を得るには、「Head First Design Patterns」をお読みください。

于 2012-05-11T17:25:59.877 に答える