2012-05-11 3 views
1

Я пытаюсь создать простую систему заказа, и поскольку это назначение, это делимитация, что я не должен делать DB и GUI, но мне нужно реализовать не менее 4 шаблонов проектирования. Одним из моих решений было использование Facade. Насколько я понимаю, класс Фасад является своего рода контроллером и это то, что я до сих пор:Шаблоны проектирования 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 и в * Список классов Я держу infromation в ArrayList. Поэтому мой вопрос: этот код - Фасад?

ответ

0

Целью фасада является защита реализации функций в определенном компоненте. Фасад обычно обеспечивает интерфейс для «внешнего мира». Я не знаю остальную часть вашего кода, но приведенный выше пример мог бы быть фасадом.

Скажите, что вы строите компонент, который извлекает сообщение из социальных сетей. Вы можете построить фасад с помощью метода GetMessage (string keyword), который (очевидно) возвращает список сообщений, независимо от источника в социальных сетях. Клиент этого компонента не заботится как компонент получает данные из социальных сетей, он просто хочет сообщений. Такие методы, как «SearchFacebook» или «SearchTwitter», могут быть скрыты, так как клиент не заинтересован в вызове этих методов. Тем не менее, «GetMessages» может использовать их для поиска в Facebook и Twitter, составить список результатов этих двух и вернуть его клиенту.

Другой хороший пример, проверьте вики-страницу: http://en.wikipedia.org/wiki/Facade_pattern

0

Intent фасада:

  1. обеспечивают унифицированный интерфейс для набора интерфейсов в подсистеме. Фасад определяет интерфейс более высокого уровня, который упрощает использование подсистемы.

  2. Оберните сложную подсистему с более простым интерфейсом.

Функциональность, которую вы предоставляете, соответствует указанным выше точкам, поэтому с моего зрения Это - Фасад.

В вашем примере вы демонстрируете функциональность подсистемы (OrdersList, ProductsList), хотя Facade.

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

Странно то, что я видел несколько примеров и книг, которые описывают картину Фасад даже не упоминая об этом. В противном случае это ключевой принцип ОО. +1 для упоминания об этом. В качестве примера: http: // sourcemaking.com/design_patterns/facade/java/1 –

0

Чтобы получить больше знаний о фасадной шаблон проектирования, читать «Head First Design Patterns»

Смежные вопросы