Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Main:
- package com.company2;
- class Main
- {
- // Метод рекурсивной рассылки сообщения от одного узла к другим
- public static void Distribute(PostOffice P, Message message) {
- if(P.getObservers()!=null) {
- P.NotifyObservers(message);
- for (PostOffice o : P.getObservers()) // Для каждого наблюдателя данного узла,
- Distribute(o, message); // Приводим этот наблюдатель к типу узла
- }
- }
- public static void main(String[] args)
- {
- System.out.println("asd");
- // Создаем два сообщения
- //Message message1 = new Message("YOU READ SECRET MESSAGE",true);
- //Message message2 = new Message("YOU READ USUAL MESSAGE",false);
- // Самостоятельно конструируем дерево узлов
- /* Node node1 = new Node("Node_1"); // Первый наблюдаемый (сам не наблюдает ни за кем)
- Node node2 = new Node("Node_2",node1); // Узел, который наблюдает за node1
- Node node3 = new Node("Node_3", node1);
- SpyNode spyNode1 = new SpyNode("SpyNode1", node3); // Секретный узел, который наблюдае за node3
- Node node4 = new Node("Node_5", spyNode1);
- SpyNode spyNode2 = new SpyNode("SpyNode2", node4);
- // Рассылаем сообщение message1 от узла node1
- Distribute(node1, message1);
- // Рассылаем сообщение message2 от узла node1
- Distribute(node1, message2);
- // Секретная информация в нычке
- SpyNode.getNychka();*/
- }
- }
- PostOffice:
- package com.company2;
- import java.util.ArrayList;
- import java.util.List;
- /**
- * Created by Максим on 06.12.2015.
- */
- public class PostOffice {
- private String Name;
- private List<Employee> employees = new ArrayList<>();
- private List<PostOffice> observers;
- private Message mes;
- PostOffice(String name)
- {
- observers = new ArrayList<PostOffice>();
- this.Name = name;
- }
- public String getName() {
- return this.Name;
- }
- public List<Employee> getEmployees() {
- return this.employees;
- }
- public List<PostOffice> getObservers()
- {
- return this.observers;
- }
- public void RegisterObserver(PostOffice o) // Добавляем наблюдателя в список
- {
- observers.add(o);
- }
- public void RemoveObserver(PostOffice o) // Удаляем наблюдателя из списка
- {
- observers.remove(o);
- }
- public void NotifyObservers(Message message) // Шлём каждому наблюдателю сообщение от наблюдаемого
- {
- this.mes = mes;
- for (Employee e : employees) {
- for (PostOffice o : observers) {
- o.Send(e.toWork(message));
- System.out.printf(" to %s by Postman %s \n", o.Name, e.getName());
- }
- }
- }
- public void Send(Message mes)
- {
- System.out.printf("%s send message \" %s ", this.Name,mes.text);
- }
- }
- Message:
- package com.company2;
- public class Message {
- public final boolean secret;
- public String text; // Информационная часть сообщения
- Message(String text, boolean secret)
- {
- this.text = text;
- this.secret = secret;
- }
- }
- Employee:
- package com.company2;
- public abstract class Employee {
- private String name;
- public Employee(String name) {
- this.name = name;
- }
- public String getName() {
- return this.name;
- }
- public void setName(String name) {
- this.name = name;
- }
- public abstract Message toWork(Message mes);
- }
- Postman:
- package com.company2;
- /**
- * Created by Максим on 06.12.2015.
- */
- public class Postman extends Employee {
- private Message mes;
- public Postman(String name) {
- super(name);
- }
- public void receiveMessage(Message mes)
- {
- this.mes=mes;
- }
- public Message sendMessage()
- {
- return mes;
- }
- @Override
- public Message toWork(Message mes) {
- receiveMessage(mes);
- return sendMessage();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment