如何避免几乎相同的继承

我有一个类OnlineState应该设置客户端并连接到服务器,并且还可以作为游戏状态(菜单、暂停、存储等)。我希望如果还没有服务器,那么该类将创建服务器然后连接到它。我已经有一个Client类和一个LocalClient继承Client和工作的类。我可以创建OnlineStateClient和OnlineStateLocalClient类,但我计划将这些类继承很多,这种方法将导致相同的代码。这是我的代码:


class Client:

    def __init__():

        # Connects to the server


class LocalClient(Client):

    def __init__():

        # Creates a server

        Client.__init__(self)  # connects to it


class OnlineState(Client, State):

    def __init__(local):

        if local:

            # connect

        else:

            # Create a server and connect

我能做些什么来解决这个问题?


拉莫斯之舞
浏览 124回答 2
2回答

慕尼黑8549860

我建议你制作“OnlineStateClient”接口和 OnlineStateLocalClient 接口,而不是使用类。因为在接口中,你只需要声明方法,不要担心方法的定义。所以不会有相同的问题代码,你可以尽可能多地继承它。

哆啦的时光机

编辑:抱歉没有集中语言,这仅包含对相同问题的意见。接口是你的朋友,关注点分离是 oop 的主要标题。Client 和 localclient 应该具有相同的方法和属性。您可以使用这两个界面来管理状态。您可以使用客户端工厂来创建本地客户端或在线客户端。您需要使用另一个类来管理连接状态行 statefactory。OOP 不仅仅是相互继承类,它还利用相似性来共同生活。interface IClient    def __init__():        # Connects to the server    def __State__() => clintStateclass Client:IClient    def __init__():        # Connects to the server    def __State__() => clintStateclass StateFactory(IClient):    def __init__(local):        switch IClient.state        case online:            # do nothing         case  local:            # Iclient = new Client(connProp)        default :希望有所帮助,我建议您检查创建性设计模式
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python