需要有关设计的意见/提示

时间:2014-09-26 21:01:05

标签: uml

我真的很想得到你的意见或任何有关以下设计问题的提示,因为我有点困惑。

我有两个对象,Client和Server,其中Client可以引用许多Server对象。每个Server对象都提供一个客户端可以调用的方法。

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

此外,我希望能够创建一系列对服务器(1和2)的调用并存储它。关于我应该怎么做的任何想法?另外,您将以何种方式在Java中实现它? (没有代码,只是想法)。

1 个答案:

答案 0 :(得分:0)

  

以便客户端可以引用更多服务器类型,

继承(类继承或接口继承)是可行的方法。

也称为“专业化”。

您的第一个场景类似于:

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

注意:“&lt;&gt;”代表一颗未填充的钻石。

然后:

..............................................................................
..+------------------------------+.........+-------------------------------+..
..|         <<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

祝你好运。