读书人

举动型模式-中介者模式(Mediator)

发布时间: 2013-08-06 16:47:25 作者: rapoo

行为型模式--中介者模式(Mediator)

User类统一接口,User1和User2分别是不同的对象,二者之间有关联,如果不采用中介者模式,则需要二者相互持有引用,这样二者的耦合度很高,为了解耦,引入了Mediator类,提供统一接口,MyMediator为其实现类,里面持有User1和User2的实例,用来实现对User1和User2的控制。这样User1和User2两个对象相互独立,他们只需要保持好和Mediator之间的关系就行,剩下的全由MyMediator类来维护!基本实现:

?

[java]?view plaincopy
  1. public?interface?Mediator?{??
  2. ????public?void?createMediator();??
  3. ????public?void?workAll();??
  4. }??
[java]?view plaincopy
  1. public?class?MyMediator?implements?Mediator?{??
  2. ??
  3. ????private?User?user1;??
  4. ????private?User?user2;??
  5. ??????
  6. ????public?User?getUser1()?{??
  7. ????????return?user1;??
  8. ????}??
  9. ??
  10. ????public?User?getUser2()?{??
  11. ????????return?user2;??
  12. ????}??
  13. ??
  14. ????@Override??
  15. ????public?void?createMediator()?{??
  16. ????????user1?=?new?User1(this);??
  17. ????????user2?=?new?User2(this);??
  18. ????}??
  19. ??
  20. ????@Override??
  21. ????public?void?workAll()?{??
  22. ????????user1.work();??
  23. ????????user2.work();??
  24. ????}??
  25. }??
[java]?view plaincopy
  1. public?abstract?class?User?{??
  2. ??????
  3. ????private?Mediator?mediator;??
  4. ??????
  5. ????public?Mediator?getMediator(){??
  6. ????????return?mediator;??
  7. ????}??
  8. ??????
  9. ????public?User(Mediator?mediator)?{??
  10. ????????this.mediator?=?mediator;??
  11. ????}??
  12. ??
  13. ????public?abstract?void?work();??
  14. }??
[java]?view plaincopy
  1. public?class?User1?extends?User?{??
  2. ??
  3. ????public?User1(Mediator?mediator){??
  4. ????????super(mediator);??
  5. ????}??
  6. ??????
  7. ????@Override??
  8. ????public?void?work()?{??
  9. ????????System.out.println("user1?exe!");??
  10. ????}??
  11. }??
[java]?view plaincopy
  1. public?class?User2?extends?User?{??
  2. ??
  3. ????public?User2(Mediator?mediator){??
  4. ????????super(mediator);??
  5. ????}??
  6. ??????
  7. ????@Override??
  8. ????public?void?work()?{??
  9. ????????System.out.println("user2?exe!");??
  10. ????}??
  11. }??

测试类:

  1. public?class?Test?{??
  2. ??
  3. ????public?static?void?main(String[]?args)?{??
  4. ????????Mediator?mediator?=?new?MyMediator();??
  5. ????????mediator.createMediator();??
  6. ????????mediator.workAll();??
  7. ????}??
  8. }??

输出:

user1 exe!
user2 exe!

读书人网 >编程

热点推荐