【问题标题】:What does it mean by client in the software design patterns?客户端在软件设计模式中是什么意思?
【发布时间】:2015-03-18 09:27:59
【问题描述】:

软件设计模式中的client是什么意思?例如,我看到这个词在设计模式中被多次提及,例如在this PHP Visitor Design Pattern tutorial 中。它甚至还有一个名为Client(它也是一种设计模式吗?)

//Client.php
error_reporting(E_ALL | E_STRICT);
ini_set("display_errors", 1);
// Autoload given function name.
function includeAll($className)
{
    include_once($className . '.php');
}
//Register
spl_autoload_register('includeAll');

class Client
{
    private static $shapeElement;
    private static $color;
    private static $package;

    //client request
    public static function request()
    {
      self::$shapeElement= array();
      self::$shapeElement=$_POST['shape'];
      self::$color=$_POST['color'];
      self::$package= array();

      $obStructure = new ObjectStructure();
      $colorVisitor= new self::$color();

      //Attach concrete elements to array & accept visitor
      foreach (self::$shapeElement as $shapeNow)
      {
        $obStructure->attach(new $shapeNow,$colorVisitor);
      }

      //Display selected shapes
      self::$package=$obStructure->getElements();
      foreach (self::$package as $colorShape)
      {
        echo $colorShape->showShape();
      }
    } 
}
Client::request();

来自wikipedia,客户端-服务器网络中的客户端,也就是我通常理解的,

客户端是访问 服务器提供的服务。服务器经常(但不是 总是)在另一个计算机系统上,在这种情况下客户端访问 通过网络提供的服务。该术语适用于程序或 属于客户端-服务器模型的设备。

那么这也是软件设计模式中client的定义吗?

如果将客户端做成类,

class Client
{
    ... 
}

那么,我是否也可以拥有 许多 个客户端,我应该将这些客户端保留在 MVC 架构模式中的什么位置?我应该/可以创建一个名为 client 的目录并将所有客户端类保存在其中吗?

【问题讨论】:

    标签: php design-patterns client-server client


    【解决方案1】:

    客户端是将在客户端机器上执行的“代码”。但是,如果我们谈论的是 Web 应用程序,那么客户端可能就是浏览器。因此,客户端不会执行任何后端代码(例如 PHP)。还有一些场合,客户端机器不是浏览器,例如 ATM 功能的场合。在这种情况下,客户端代码是最终用户进行特定交易(取款、存款等)时在 ATM 机中执行的代码。

    现在,关于“许多客户端”,这取决于您是否引用不同的实例或类型。如果您引用不同类型的客户端(例如,每个公司的 ATM 有不同的客户端),那么您可以创建一个通用 Client 类并为每个公司创建一个类,该类将从通用类继承基本功能。如果您指的是实例,那么您不必做任何事情,因为当客户端计算机进行新事务时,将初始化合适的客户端类的新实例并使用该实例。您可以创建一个了解客户端机器类型并初始化合适类型的客户端的类。

    为 Client 类创建一个不同的目录并为继承的所有不同子类创建一个单独的子目录是明智的。

    【讨论】:

    • 感谢您的回答。 The client is the 'code' that will be executed in the client machine. 但我上面示例中的 class Client 是一个 php,而 php 是一个服务器端脚本,不是吗?
    • 当然,PHP 是服务器端。这就是我对 2 个示例进行区分的原因。您的示例可以在客户端机器可以执行 PHP 的项目中实现,例如支持 PHP :P 的 ATM。但是,这在 Web 应用程序(网站等)中是不可行的,因为您必须在 Javascript 或浏览器支持的任何其他客户端语言中实现所需的功能。
    • aww 好的,谢谢您的回复。似乎很难区分,但我想我可以理解您要解释的内容。谢谢。
    【解决方案2】:

    客户端是通常受益于该模式的一个或多个类的通用名称。在实际应用中,可能不叫Client。

    许多模式都提供protected variations,而客户端是受保护的类,可防止设计中对扩展开放的部分发生变化。在Visitor 的情况下,如果您添加新的访问者功能,客户端中的代码不需要任何(或许多)更改。

    另一种看待它的方式是,进行编程有两个原因:

    1. 开发应用程序
    2. 开发框架(或有助于开发应用程序的代码——第一个原因)

    设计模式属于第二个方面。在这种情况下,将设计模式视为拥有一个客户端程序员,其目标是快速轻松地开发应用程序。她开发的代码中的任何类都可以是 client 类,特别是如果它们使用这些模式。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-11-19
      • 2013-05-27
      • 2023-04-02
      • 2013-05-03
      • 2010-12-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多