2014-09-26 62 views
1

我真的很想听听您的意见,或对以下设计问题有任何提示,因为我有点困惑。需要对设计的意见/提示

我有两个对象,客户端和服务器,客户端可以引用许多服务器对象。每个服务器对象都提供一个客户端可以调用的方法。

我想要做的是改变这种关系,以便客户端可以引用更多的服务器类型,例如Server_1和Server_2。我目前正在考虑使用多态,无论是与接口或抽象类。例如,Server_1和Server_2扩展/实现服务器,并且客户端仍保留一个服务器引用列表。这是否有意义,或者有更好的/不同的方式来做到这一点?

此外,我希望能够创建一个调用链到服务器(1和2)并存储它。任何想法我应该如何去做呢?另外,你将以什么方式在Java中实现它? (没有代码,只是想法)。

+1

你是什么意思,客户端可以“引用”到服务器。客户端是否存储指向服务器对象的变量? – jollarvia 2014-09-26 21:05:43

+0

@jollarvia,这意味着客户端可以与许多服务器或[客户端] ------ * [服务器]关联。因此,客户端将拥有一个指向服务器对象的数据结构。 – 2014-09-28 21:32:03

回答

0

,使客户可以参考更多的服务器类型,

继承(类继承或接口继承)是要走的路。

也知道“专业化”。

你的第一个场景是相似的:

........................................................................ 
..+--------------------------+..............+------------------------+.. 
..|   <<class>>  |..............|  <<class>>  |.. 
..|  CustomerClass  |..............|  ServerClass  |.. 
..+--------------------------+....uses......+------------------------+.. 
..| [+] Servers: ServerClass +-----------< >+ [+] void DoSomething() |.. 
..+--------------------------+..............+------------------------+.. 
........................................................................ 

注: “<>” 表示空心菱形。

然后:

.............................................................................. 
..+------------------------------+.........+-------------------------------+.. 
..|   <<abstract>>   |.........|   <<concrete>>   |.. 
..|   ServerClass   |.........|  PDFPrinterClass  |.. 
..+------------------------------+.../|....+-------------------------------+.. 
..| [+] void Print() <<virtual>> |--< |-+--+ [+] void Print() <<override>> |.. 
..+------------------------------+...\|.|..+-------------------------------+.. 
........................................|..................................... 
........................................|..+-------------------------------+.. 
........................................|..|   <<concrete>>   |.. 
........................................|..|  WordPrinterClass  |.. 
........................................|..+-------------------------------+.. 
........................................+--+ [+] void Print() <<override>> |.. 
...........................................+-------------------------------+.. 
.............................................................................. 

我喜欢分开继承关联聚合协会,作为不同的图。

但是,在情况下,如果你还需要两个:

.................................... 
..+------------------------------+.. 
..|   <<class>>   |.. 
..|   CustomerClass  |.. 
..+------------------------------+.. 
..| [+] Servers:  ServerClass |.. 
..+--------------+---------------+.. 
.................|.................. 
.................|.................. 
.................|.................. 
................< >........................................................... 
..+--------------+---------------+.........+-------------------------------+.. 
..|   <<abstract>>   |.........|   <<concrete>>   |.. 
..|   ServerClass   |.........|  PDFPrinterClass  |.. 
..+------------------------------+.../|....+-------------------------------+.. 
..| [+] void Print() <<virtual>> |--< |-+--+ [+] void Print() <<override>> |.. 
..+------------------------------+...\|.|..+-------------------------------+.. 
........................................|..................................... 
........................................|..+-------------------------------+.. 
........................................|..|   <<concrete>>   |.. 
........................................|..|  WordPrinterClass  |.. 
........................................|..+-------------------------------+.. 
........................................+--+ [+] void Print() <<override>> |.. 
...........................................+-------------------------------+.. 
.............................................................................. 

创建调用链的服务器(1和2)和存储。

你可能想调查有关 “命令” 设计模式:

http://en.wikipedia.org/wiki/Command_pattern

好运。

+0

感谢您的回复,它证实了我在做什么。对于我的问题的第一部分这是一个可以接受的答案。第二个任何想法(尤其是存储呼叫链)? – 2014-09-28 21:47:09