书城计算机大话设计模式
11030400000108

第108章 1 运动协会

时间:12月31日地点:大B房间人物:大B,小。

小A:“师兄,什么是运动协会?”

大B:“比如有个国家的运动员协会,他们是负责登记与注册职业运动员的(就好像我们国家的体育总局,无论足球篮球还是乒乓球的运动员都必须在这里注册才能拿到我们国家职业运动员牌照)。一家体育俱乐部(比如篮球的广东宏远,足球的深圳健力宝)想获得球员为自己俱乐部效力,就必须通过这个运动员协会。”

小A:“怎样去实现‘运动员’接口?有几个客户端?”

大B:“根据DIP我们可以设计一个‘运动员’接口,‘足球运动员’和‘篮球运动员’(还有其他运动员)都实现‘运动员’这个接口。而‘运动员协会’就是一个简单工厂类,它负责实例化‘运动员’。我们这里的‘俱乐部’就是一个客户端(Client),不同的‘俱乐部’就是不同的客户端。对于不同的俱乐部对象(无论是八一还是深圳健力宝),他们都是面向‘运动员’接口编程,而不用管是‘足球运动员’还是‘篮球运动员’,也就是说实现了‘运动员’接口的具体类‘足球运动员’无需暴露给客户端。这也满足了DIP。”

小A:“但具体的俱乐部(比如足球的深圳健力宝)如何确保自己获取的是自己想要的运动员(健力宝俱乐部需要的当然是足球运动员)呢?”

大B:“这就需要‘运动员协会’这一工厂类了。俱乐部通过调用‘运动员协会’的具体方法,返回不同的实例。这同时也满足了LoD,也就是‘深圳健力宝足球俱乐部’对象不直接与‘足球运动员:李毅’对象通信,而是通过他们共同的‘朋友’――‘国家体育总局’通信。”