1

我正在尝试制作一个简单的排序系统,因为它是一个分配,所以我不应该制作 DB 和 GUI,但我需要实现至少 4 种设计模式。我的一个决定是使用 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
}

在您的代码中使用接口而不是实现。

于 2012-05-11T13:00:37.310 回答
0

立面的意图:

  1. 为子系统中的一组接口提供统一的接口。Facade 定义了一个更高级别的接口,使子系统更易于使用。

  2. 用更简单的接口包装复杂的子系统。

您提供的功能与上述几点相匹配,所以在我看来它是一个门面。

在您的示例中,您通过 Facade 公开子系统(OrdersList,ProductsList)功能。

于 2012-05-11T11:31:44.793 回答
0

要获得有关外观设计模式的更多知识,请阅读“Head First Design Patterns”

于 2012-05-11T17:25:59.877 回答
0

外观的目标是屏蔽某个组件中功能的实现。外观通常为“外部世界”提供接口。我不知道你的其余代码,但上面的例子可能是一个门面。

假设您正在构建一个从社交媒体获取消息的组件。您可以使用“GetMessage(字符串关键字)”方法构建外观,该方法(显然)返回消息列表,而不管社交媒体来源如何。该组件的客户端并不关心组件如何从社交媒体获取数据,他只想要消息。可以隐藏诸如“SearchFacebook”或“SearchTwitter”之类的方法,因为客户端对调用这些方法没有兴趣。但是,“GetMessages”可以使用它们来搜索 Facebook 和 Twitter,构建这两个结果的列表并将其返回给客户端。

另一个很好的例子,请查看 wiki 页面:http ://en.wikipedia.org/wiki/Facade_pattern

于 2012-05-11T11:21:33.983 回答