Как избежать создания почти идентичного наследования - PullRequest
0 голосов
/ 14 февраля 2019

У меня есть класс 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

Что я могу сделать, чтобы решить эту проблему?

Ответы [ 2 ]

0 голосов
/ 16 февраля 2019

Я бы посоветовал вам сделать интерфейс "OnlineStateClient" и интерфейс OnlineStateLocalClient вместо использования классов. Так как в интерфейсах вам просто нужно объявить методы и не беспокоиться об определении метода. Так что не будетвыдача идентичного кода, и вы можете наследовать его столько раз, сколько это возможно.

0 голосов
/ 15 февраля 2019

Редактировать: Извините, что не фокусируете язык, это содержит только мнение по тем же вопросам.

Интерфейс - ваш друг, а разделение интересов - главное название 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 :

Надежда помогает, и я предлагаю вам проверить шаблоны креативного дизайна

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...