首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >外观模式,这样可以吗?

外观模式,这样可以吗?
EN

Stack Overflow用户
提问于 2011-09-30 06:21:40
回答 3查看 242关注 0票数 0

我有两台服务器,我将从一个客户端连接到这两台服务器。对于每个服务器,我将执行ftp "put“和"rm”。

我是否应该构建一个外观,并拥有一个这样的界面:

代码语言:javascript
复制
void putFileOnServer1(String file)
void putFileOnServer2(String file)
void removeFromServer1(String file)
void removeFromServer2(String file)

而且,外观是否应该处理所有连接的建立和断开?如果是这样的话,是否应该使用工厂来这样做呢?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-09-30 06:29:47

您有两个方法: PutFileOnServer和RemoveFromServer。您要放置或从中移除的服务器应该是抽象的一部分。

票数 1
EN

Stack Overflow用户

发布于 2011-09-30 07:20:10

ftp服务器是否有不同的接口?或者,它们是否都理解您想要使用的同一组命令?

  1. 如果是这样,那么只需创建一个接受连接信息的FtpServer类。并创建一个接受多个服务器的FtpClient类,例如,您可以通过某个键选择这些服务器。(至少在某种程度上,这可能是我会做的事情)。

class FtpClient { public function addServer( FtpServer $server,$key );public function selectServer( $key );public function putFileOnServer( $file );public function removeFileFromServer( $file );}

  • 如果没有,并且您已经为每个单独的实现创建了一个根据其接口而不同的类,例如:

类FtpServerFoo {公共函数selectFile( $file );公共函数removeSelectedFile();}类FtpServerBar {公共函数removeFile( $file );}

..。您应该查看Adapter Pattern

抽象类FtpServer {抽象公共函数putFile( $file );抽象公共函数removeFile( $file );}类FtpServerAdapterFoo扩展FtpServer {公共函数__construct( FtpServerFoo $server ){}公共函数removeFile( $file ){$this->服务器->selectFile( $file );$this->服务器->removeSelectedFile();}}类FtpServerAdapterBar扩展FtpServer { public function __construct( FtpServerBar $server ){} public function removeFile( $file ){ $this->server->removeFile( $file );}} $cilent = FtpClient();$client->addServer( new FtpServerAdapterFoo( new FtpServerFoo() ),0 );$client->addServer( new FtpServerAdapterBar( new FtpServerBar() ),1 );$client->selectServer( 0 );$client->putFileOnServer( $file );$client->selectServer( 1 );$client->removeFileFromServer( $someOtherfile );FTP

  • 如果您还没有为不同的ftp服务器创建单独的类,那么您可以为每个ftp服务器实现实现相同的接口(或继承一个抽象类),并再次使用与上述相同类型的FtpClient类。

不过,这里并没有涉及到真正的门面模式。

票数 1
EN

Stack Overflow用户

发布于 2011-09-30 06:34:21

您通常使用facades来降低多种对象类型之间的复杂性。不过,在本例中,您似乎只想使用一个函数“类型”,即"FTPServer“。因此,在很大程度上,您应该只有两个此类型的实例,并且此类型将有一个"put“和"remove”方法。

当您添加不必要的功能点时,实际上增加了维护的复杂性。例如,如果您需要向函数添加一个新参数(可能是访问限制或其他什么),您不仅需要针对每个使用位置进行更改,而且现在还必须添加到每个外观方法中。抽象应该减少这种类型的耦合,而不是增加它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7604033

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档