为了账号安全,请及时绑定邮箱和手机立即绑定

如何避免几乎相同的继承

如何避免几乎相同的继承

拉莫斯之舞 2021-11-09 14:39:39
我有一个类OnlineState应该设置客户端并连接到服务器,并且还可以作为游戏状态(菜单、暂停、存储等)。我希望如果还没有服务器,那么该类将创建服务器然后连接到它。我已经有一个Client类和一个LocalClient继承Client和工作的类。我可以创建OnlineStateClient和OnlineStateLocalClient类,但我计划将这些类继承很多,这种方法将导致相同的代码。这是我的代码:class Client:    def __init__():        # Connects to the serverclass LocalClient(Client):    def __init__():        # Creates a server        Client.__init__(self)  # connects to itclass OnlineState(Client, State):    def __init__(local):        if local:            # connect        else:            # Create a server and connect我能做些什么来解决这个问题?
查看完整描述

2 回答

?
慕尼黑8549860

TA贡献1818条经验 获得超11个赞

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


查看完整回答
反对 回复 2021-11-09
?
哆啦的时光机

TA贡献1779条经验 获得超6个赞

编辑:抱歉没有集中语言,这仅包含对相同问题的意见。


接口是你的朋友,关注点分离是 oop 的主要标题。Client 和 localclient 应该具有相同的方法和属性。您可以使用这两个界面来管理状态。


您可以使用客户端工厂来创建本地客户端或在线客户端。您需要使用另一个类来管理连接状态行 statefactory。OOP 不仅仅是相互继承类,它还利用相似性来共同生活。


interface IClient

    def __init__():

        # Connects to the server

    def __State__() => clintState

class Client:IClient

    def __init__():

        # Connects to the server

    def __State__() => clintState




class StateFactory(IClient):

    def __init__(local):

        switch IClient.state

        case online:

            # do nothing 

        case  local:

            # Iclient = new Client(connProp)

        default :

希望有所帮助,我建议您检查创建性设计模式


查看完整回答
反对 回复 2021-11-09
  • 2 回答
  • 0 关注
  • 123 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信