我正在尝试创建一个简单的排序系统,因为它是一个赋值,所以我不应该创建DB和GUI,但我需要实现至少4个设计模式。我的一个决定是使用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、Clients List、Products和ProductsList,在*List类中,我将信息保存在ArrayList中。所以我的问题是:这段代码是外观吗?
发布于 2012-05-11 20:04:09
facade应该是为了让我不知道某些类和它们实现的操作。在你的例子中,我可能不需要知道ClientList,但我确实需要知道客户,产品和订单。如果这些类对我隐藏起来会更好,所以我只需要和facade对话。
发布于 2012-05-11 21:00:37
编写一个额外的接口,这样开发人员就不必使用facade的实现了:
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-11 19:21:34
外观的目标是屏蔽特定组件中的功能实现。外观通常会提供一个“外部世界”的接口。我不知道您代码的其余部分,但上面的示例可能只是一个门面。
假设您正在构建一个从社交媒体获取消息的组件。您可以使用'GetMessage(string keyword)‘方法构建一个facade,该方法(显然)返回一个消息列表,而不考虑社交媒体来源。该组件的客户端并不关心该组件如何从社交媒体获取数据,他只想要消息。像“SearchFacebook”或“SearchTwitter”这样的方法可以被隐藏,因为客户端对调用这些方法没有兴趣。然而,'GetMessages‘可以使用它们来搜索Facebook和Twitter,建立一个这两个结果的列表,并将其返回给客户端。
还有另一个很好的例子,请查看维基页面:http://en.wikipedia.org/wiki/Facade_pattern
https://stackoverflow.com/questions/10550288
复制相似问题