2014-09-26 49 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