工厂课程,这样我就可以改变我的其他客户

用户672009

到目前为止,我有一个名为RestClient的rest客户端,它实现了一个名为IRestClient的接口。在整个代码中,我在声明其余客户端时使用IRestClient。但是在几个地方,我使用new运算符创建了客户端。因此,如果我想将客户端更改为NewRestClient,则必须遍历我的代码并找到创建客户端的所有位置。

解决这个问题的好方法是什么?像下面这样的工厂班还可以吗?

class RestClientFactory
{
    public static IRestClient create()
    {
        return new RestClient();
    }
}

那样的话,我只有一个地方可以将RestClient()更改为NewRestClient()。

路易吉·门多萨(Luiggi Mendoza)

仅当您希望/需要IRestClient基于某些参数提供确切的实现时,才需要使用工厂方法模式由于这似乎不是您的情况,因此通过面向interfaces进行编程会很好所以,不要这样:

RestClient restClient = new RestClient();
restClient.foo("bar");

您将拥有:

//declare the variable as interface
//assign the value with the class implementation
IRestClient restClient = new RestClient();
restClient.foo("bar");

因此,如果您需要一个新的实现,只需将当前实现更改为所需的实现即可:

IRestClient restClient = new FooRestClient();
//rest of the code remains intact
restClient.foo("bar");

如果要将其移入Factory Method Pattern,则将具有以下内容:

class RestClientFactory {
    public static IRestClient defaultRestClient() {
        return new RestClient();
    }
    public static IRestClient createRestClient(String name) {
        String realName = name.toLowerCase();
        switch(realName) {
            case "foo":
                return new FooRestClient();
            case "bar":
                return new BarRestClient();
            //and on...
            default:
                return defaultRestClient();
        }
    }
}

然后,您必须通过从工厂调用相应的方法来初始化实例:

IRestClient restClient = RestClientFactory.createRestClient("foo");
//rest of the code remains intact
restClient.foo("bar");

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

工厂课程,这样我就可以改变我的其他客户

来自分类Dev

将db列设置为可选或不必需,这样我就可以创建记录

来自分类Dev

Fabric:处理异常,这样我就可以在try块中捕获它

来自分类Dev

使用厨师创建用户,这样我就可以进入框内

来自分类Dev

在rgb()中使用命名的r颜色,这样我就可以添加alpha值

来自分类Dev

正确的实例化类的方法,这样我就可以验证证书中的路径链

来自分类Dev

使ajax调用重复功能,这样我就可以再次调用它n

来自分类Dev

Windows 7随机关闭。在哪里可以找到相关日志?这样我就可以识别错误

来自分类Dev

在Applescript的文件路径中获取所有文件夹-这样我就可以对其进行标记

来自分类Dev

将数据从Python程序保存到“工作区”,这样我就可以绘图而不必再次运行该程序

来自分类Dev

尝试将随机生成的密码存储为字符串,这样我就可以将其保存到文件(Java)

来自分类Dev

通过单击链接登录到Google Apps(这样我就可以在帐户之间切换)

来自分类Dev

在Applescript的文件路径中获取所有文件夹-这样我就可以对其进行标记

来自分类Dev

使用history.js来检测是否支持HTML4,这样我就可以绕过ajax

来自分类Dev

如何从xampp安装链接到php,这样我就可以使用php命令而不是完整路径了?

来自分类Dev

在src文件夹中获取txt文件的路径,这样我就可以将其读取到数组中

来自分类Dev

在我的XSL文件中包含一个C#(.cs)文件,这样我就可以使用智能感知了吗?

来自分类Dev

为什么有时我必须在 Pandas 中提供数据集的完整路径才能读取它,而其他时候它只需要提供数据集文件名就可以工作?

来自分类Dev

如何在mariadb中编写基于组的中位数和模式计算函数?这样我就可以在查询本身中使用它

来自分类Dev

在一个变量中对多个观察进行分类,这样我就可以将它们归类在新的专栏中。如何使代码更短?在R中

来自分类Dev

使用char * array存储条形图的条形,这样我就可以动态创建它并以字符串形式返回

来自分类Dev

我希望角色只要按住按钮就可以做某事,一旦放开按钮,就可以恢复正常

来自分类Dev

我如何只用一个命令就可以观看和实时重载-Gruntjs

来自分类Dev

启动后,我的电脑挂了几分钟,然后就可以了

来自分类Dev

我如何不只更改几天就可以更改当前日期?

来自分类Dev

为什么访问不用`var`声明的变量而不必在其他文件中使用`require`就可以工作呢?

来自分类Dev

WordPress网站在chrome中看起来太大(在其他浏览器中就可以了)

来自分类Dev

在线程内调用线程会给我错误,如果我只是调用函数就可以正常工作

来自分类Dev

我是否可以配置AzerothCore,以便仅两个人就可以从头到尾播放(突袭)WLK?

Related 相关文章

  1. 1

    工厂课程,这样我就可以改变我的其他客户

  2. 2

    将db列设置为可选或不必需,这样我就可以创建记录

  3. 3

    Fabric:处理异常,这样我就可以在try块中捕获它

  4. 4

    使用厨师创建用户,这样我就可以进入框内

  5. 5

    在rgb()中使用命名的r颜色,这样我就可以添加alpha值

  6. 6

    正确的实例化类的方法,这样我就可以验证证书中的路径链

  7. 7

    使ajax调用重复功能,这样我就可以再次调用它n

  8. 8

    Windows 7随机关闭。在哪里可以找到相关日志?这样我就可以识别错误

  9. 9

    在Applescript的文件路径中获取所有文件夹-这样我就可以对其进行标记

  10. 10

    将数据从Python程序保存到“工作区”,这样我就可以绘图而不必再次运行该程序

  11. 11

    尝试将随机生成的密码存储为字符串,这样我就可以将其保存到文件(Java)

  12. 12

    通过单击链接登录到Google Apps(这样我就可以在帐户之间切换)

  13. 13

    在Applescript的文件路径中获取所有文件夹-这样我就可以对其进行标记

  14. 14

    使用history.js来检测是否支持HTML4,这样我就可以绕过ajax

  15. 15

    如何从xampp安装链接到php,这样我就可以使用php命令而不是完整路径了?

  16. 16

    在src文件夹中获取txt文件的路径,这样我就可以将其读取到数组中

  17. 17

    在我的XSL文件中包含一个C#(.cs)文件,这样我就可以使用智能感知了吗?

  18. 18

    为什么有时我必须在 Pandas 中提供数据集的完整路径才能读取它,而其他时候它只需要提供数据集文件名就可以工作?

  19. 19

    如何在mariadb中编写基于组的中位数和模式计算函数?这样我就可以在查询本身中使用它

  20. 20

    在一个变量中对多个观察进行分类,这样我就可以将它们归类在新的专栏中。如何使代码更短?在R中

  21. 21

    使用char * array存储条形图的条形,这样我就可以动态创建它并以字符串形式返回

  22. 22

    我希望角色只要按住按钮就可以做某事,一旦放开按钮,就可以恢复正常

  23. 23

    我如何只用一个命令就可以观看和实时重载-Gruntjs

  24. 24

    启动后,我的电脑挂了几分钟,然后就可以了

  25. 25

    我如何不只更改几天就可以更改当前日期?

  26. 26

    为什么访问不用`var`声明的变量而不必在其他文件中使用`require`就可以工作呢?

  27. 27

    WordPress网站在chrome中看起来太大(在其他浏览器中就可以了)

  28. 28

    在线程内调用线程会给我错误,如果我只是调用函数就可以正常工作

  29. 29

    我是否可以配置AzerothCore,以便仅两个人就可以从头到尾播放(突袭)WLK?

热门标签

归档