ModestGenius

Untitled

Dec 7th, 2015
99
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.31 KB | None | 0 0
  1. package com.company;
  2.  
  3. class Main
  4. {
  5. // Метод рекурсивной рассылки сообщения от одного узла к другим
  6. public static void Distribute(PostOffice P, Message message) {
  7. if(P.getObservers()!=null) {
  8. P.ReceiveMessege(message);
  9. P.NotifyObservers();
  10. for (PostOffice o : P.getObservers()) // Для каждого наблюдателя данного узла,
  11. Distribute(o, message); // Приводим этот наблюдатель к типу узла
  12. }
  13.  
  14. }
  15.  
  16. public static void main(String[] args)
  17. {
  18. System.out.println("asd");
  19. Message message1 = new Message("YOU READ SECRET MESSAGE",true);
  20. Message message2 = new Message("YOU READ USUAL MESSAGE",true);
  21. PostOffice A = new PostOffice("Архангельск");
  22. PostOffice B = new PostOffice("Брест");
  23. PostOffice C = new PostOffice("Царьград");
  24. PostOffice D = new PostOffice("Дмитров");
  25. PostOffice E = new PostOffice("Екатеринбург");
  26. PostOffice F = new PostOffice("Фрязино");
  27. PostOffice G = new PostOffice("Геленджик");
  28. PostOffice H = new PostOffice("Харьков");
  29. Employee a= new Postman("Александр");
  30. Employee b= new Postman("Борис");
  31. Spy c=new Spy("Цезарь");
  32. Employee d=new Postman("Денис");
  33. Employee e=new Postman("Евгений");
  34. Spy f=new Spy("Федор");
  35. Linked g=new Linked("Геннадий");
  36. Linked h=new Linked("Хабиб");
  37. A.RegisterEmployee(a,Post.POSTMAN);
  38. B.RegisterEmployee(b,Post.POSTMAN);
  39. C.RegisterEmployee(c,Post.SPY);
  40. D.RegisterEmployee(d,Post.POSTMAN);
  41. E.RegisterEmployee(e,Post.POSTMAN);
  42. F.RegisterEmployee(f,Post.SPY);
  43. G.RegisterEmployee(g, Post.CLEANER);
  44. H.RegisterEmployee(h, Post.ACCOUNTER);
  45. A.RegisterObserver(B);
  46. A.RegisterObserver(C);
  47. C.RegisterObserver(D);
  48. C.RegisterObserver(E);
  49. C.RegisterObserver(G);
  50. B.RegisterObserver(F);
  51. F.RegisterObserver(H);
  52. c.RegisterLinked(g);
  53. f.RegisterLinked(h);
  54. Distribute(A, message1);
  55. Distribute(C, message2);
  56. Linked.getNychka();
  57. /* Node node1 = new Node("Node_1"); // Первый наблюдаемый (сам не наблюдает ни за кем)
  58. Node node2 = new Node("Node_2",node1); // Узел, который наблюдает за node1
  59. Node node3 = new Node("Node_3", node1);
  60. SpyNode spyNode1 = new SpyNode("SpyNode1", node3); // Секретный узел, который наблюдае за node3
  61. Node node4 = new Node("Node_5", spyNode1);
  62. SpyNode spyNode2 = new SpyNode("SpyNode2", node4);
  63. // Рассылаем сообщение message1 от узла node1
  64. Distribute(node1, message1);
  65. // Рассылаем сообщение message2 от узла node1
  66. Distribute(node1, message2);
  67. // Секретная информация в нычке
  68. SpyNode.getNychka();*/
  69. }
  70. }
  71.  
  72. package com.company;
  73.  
  74. public abstract class Employee {
  75. private String name;
  76. protected Message mes;
  77. public Employee(String name) {
  78. this.name = name;
  79. }
  80.  
  81. public String getName() {
  82. return this.name;
  83. }
  84.  
  85. public void setName(String name) {
  86. this.name = name;
  87. }
  88. abstract public Message toWork();
  89. abstract public void toWork(Message mes);
  90.  
  91.  
  92. }
  93.  
  94. package com.company;
  95.  
  96.  
  97. public class Postman extends Employee {
  98. public Postman(String name) {
  99. super(name);
  100. }
  101.  
  102. public void receiveMessage(Message mes)
  103. {
  104. this.mes=mes;
  105. }
  106. public Message sendMessage()
  107. {
  108. return mes;
  109. }
  110. @Override
  111. public void toWork(Message mes) {
  112. receiveMessage(mes);
  113. }
  114. @Override
  115. public Message toWork() {
  116. return sendMessage();
  117. }
  118.  
  119.  
  120.  
  121. }
  122.  
  123. package com.company;
  124.  
  125. import java.util.ArrayList;
  126. import java.util.List;
  127.  
  128.  
  129. public class Spy extends Postman {
  130. List<Linked> linkeds = new ArrayList<>();
  131. public Spy(String name) {
  132. super(name);
  133. }
  134. public void RegisterLinked(Linked l) // Добавляем наблюдателя в список
  135. {
  136. linkeds.add(l);
  137. }
  138. public void RemoveLinked(Linked l) // Удаляем наблюдателя из списка
  139. {
  140. linkeds.remove(l);
  141. }
  142. @Override
  143. public Message toWork() {
  144. doDirtyWork();
  145. return sendMessage();
  146.  
  147. }
  148. public void doDirtyWork()
  149. {
  150. if(mes.getSecret()) {
  151.  
  152. for (Linked l : linkeds) {
  153. l.toWork(this.mes);
  154. }
  155. }
  156. }
  157.  
  158. }
  159.  
  160.  
  161. package com.company;
  162.  
  163. import java.util.ArrayList;
  164. import java.util.List;
  165.  
  166. /**
  167. * Created by Максим on 06.12.2015.
  168. */
  169. public class Linked extends Employee {
  170. public static List<String> nychka = new ArrayList<>();
  171. private Message mes;
  172. public Linked(String name) {
  173. super(name);
  174. }
  175.  
  176. @Override
  177. public Message toWork() {
  178. return new Message("Я связный сотрудник",false);
  179. }
  180.  
  181. public void receiveMessage(Message mes)
  182. {
  183. this.mes=mes;
  184. }
  185. @Override
  186. public void toWork(Message mes) {
  187. receiveMessage(mes);
  188. if(!Linked.nychka.contains(mes.text))
  189. Linked.nychka.add(mes.text);
  190. }
  191. public static void getNychka()
  192. {
  193. System.out.println("В нычке находится: ");
  194. for(String str:nychka)
  195. System.out.println(str);
  196. }
  197. }
  198.  
  199.  
  200. package com.company;
  201. import java.util.*;
  202.  
  203. /**
  204. * Created by Максим on 06.12.2015.
  205. */
  206. public class PostOffice {
  207.  
  208. private String Name;
  209. private Map<Employee,Post> employees;
  210. private List<PostOffice> observers;
  211. private Message mes;
  212. PostOffice(String name)
  213. {
  214. observers = new ArrayList<PostOffice>();
  215. this.Name = name;
  216. employees = new HashMap<Employee,Post>();
  217. }
  218.  
  219. public String getName() {
  220. return this.Name;
  221. }
  222. public Map<Employee, Post> getEmployees() {
  223. return this.employees;
  224. }
  225. public List<PostOffice> getObservers()
  226. {
  227. return this.observers;
  228. }
  229.  
  230. public void RegisterObserver(PostOffice o) // Добавляем наблюдателя в список
  231. {
  232. observers.add(o);
  233. }
  234. public void RemoveObserver(PostOffice o) // Удаляем наблюдателя из списка
  235. {
  236. observers.remove(o);
  237. }
  238.  
  239. public void RegisterEmployee(Employee o,Post p) // Добавляем наблюдателя в список
  240. {
  241. employees.put(o, p);
  242. }
  243. public void RemoveEmployee(Employee o) // Удаляем наблюдателя из списка
  244. {
  245. employees.remove(o);
  246. }
  247. public void ReceiveMessege(Message mes) {
  248. this.mes = mes;
  249. Iterator<Map.Entry<Employee, Post>> itr = employees.entrySet().iterator();
  250. while (itr.hasNext()) {
  251. Map.Entry<Employee, Post> entry = itr.next();
  252. if(entry.getValue().toString().contains(Post.POSTMAN.toString())||entry.getValue().toString().contains(Post.SPY.toString()))
  253. entry.getKey().toWork(mes);
  254. }
  255. }
  256.  
  257. public void NotifyObservers() // Шлём каждому наблюдателю сообщение от наблюдаемого
  258. {
  259. Iterator<Map.Entry<Employee, Post>> itr = employees.entrySet().iterator();
  260. while (itr.hasNext()) {
  261. Map.Entry<Employee, Post> entry = itr.next();
  262. if(entry.getValue().toString().contains(Post.POSTMAN.toString())||entry.getValue().toString().contains(Post.SPY.toString()))
  263. for (PostOffice p : observers) {
  264. p.ReceiveMessege(entry.getKey().toWork());
  265. System.out.printf("%s слать сообщение \"%s\" by Postman %s", this.Name, mes.text, entry.getKey().getName());
  266. p.Send(entry.getKey().toWork());
  267. }
  268. }
  269. }
  270.  
  271. /* public void NotifyObservers(Message message) // Шлём каждому наблюдателю сообщение от наблюдаемого
  272. {
  273. this.mes = mes;
  274. for (Employee e : employees) {
  275. for (PostOffice o : observers) {
  276. o.Send(e.toWork(message));
  277. System.out.printf(" to %s by Postman %s \n", o.Name, e.getName());
  278. }
  279.  
  280. }
  281. }
  282.  
  283. */
  284. public void Send(Message mes)
  285. {
  286. System.out.printf(" to %s \n", this.Name);
  287. }
  288. }
  289.  
  290.  
  291. package com.company;
  292.  
  293. /**
  294. * Created by Максим on 07.12.2015.
  295. */
  296. public enum Post {
  297. POSTMAN,
  298. ACCOUNTER,
  299. ASSISTANT,
  300. SPY,
  301. LINKED,
  302. CLEANER
  303. }
  304.  
  305.  
  306.  
  307. package com.company;
  308.  
  309. public class Message {
  310. private boolean secret;
  311. public String text; // Информационная часть сообщения
  312. Message(String text, boolean secret)
  313. {
  314. this.text = text;
  315. this.secret = secret;
  316. }
  317. public boolean getSecret(){
  318. return secret;
  319. }
  320. }
Advertisement
Add Comment
Please, Sign In to add comment