我真的很想得到你的意见或任何有关以下设计问题的提示,因为我有点困惑。
我有两个对象,Client和Server,其中Client可以引用许多Server对象。每个Server对象都提供一个客户端可以调用的方法。
我想做的是更改此关系,以便客户端可以引用更多服务器类型,例如Server_1和Server_2。我目前正在考虑使用接口或抽象类的多态。例如,Server_1和Server_2扩展/实现服务器,客户端仍保留服务器引用列表。这有什么意义还是有更好/不同的方式来做到这一点?
此外,我希望能够创建一系列对服务器(1和2)的调用并存储它。关于我应该怎么做的任何想法?另外,您将以何种方式在Java中实现它? (没有代码,只是想法)。
答案 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
祝你好运。