Это лучший подход к созданию объектов в Java, чем этот? - PullRequest
1 голос
/ 21 декабря 2010

Подход к созданию объектов

В настоящее время

У меня есть следующая структура

Abstract Class A{

public abstract void B();
public abstract void C();
public abstract void D();

public void E(){
 sample Statements;

}
}


public class Z extends A{

    public void B() {
        // TODO Auto-generated method stub

    }


    public void C() {
        // TODO Auto-generated method stub

    }


    public void D() {
        // TODO Auto-generated method stub

    }

    public void X() {
        Sample Statements;;
        Whcih is very specific to this Class;

    }


}

Мой вопрос в вышеприведенном классе Z, я не хочу подразумевать Iопределим только метод X, который очень специфичен для

. Таким же образом я определю новый класс P, который, но другие 2 метода не реализованы.

Это правильный способреализовать способ Creatin в соответствии с моими требованиями для создания объекта?

Или есть ли лучший подход к созданию

Я обеспокоен в классе Z, так как методы C & D не являютсяБудут ли какие-либо непредвиденные эффекты во время моего программирования позже

Еще одна мысль у меня есть

Должен ли я использовать фабричный шаблон проектирования для реализации тех же объектов?

Ответы [ 4 ]

3 голосов
/ 21 декабря 2010

Ваш дизайн может нарушать принцип замещения Лискова.Попробуйте использовать интерфейс для X () и / или делегирование вместо наследования.

0 голосов
/ 21 декабря 2010

Переместите эти абстрактные методы в интерфейс.И если кому-то вообще нужны эти абстрактные методы и метод X, они могут расширить A и реализовать новый интерфейс.

0 голосов
/ 21 декабря 2010

Когда некоторые или все абстрактные методы в абстрактном классе не реализованы во всех дочерних классах, вы почти наверняка делаете что-то не так.Поскольку вы не описали то, что пытаетесь смоделировать, сложно предложить конкретные варианты реализации.

Спросите себя: почему вы написали этот абстрактный класс в первую очередь?Не могли бы вы сделать то же самое с помощью набора интерфейсов?

0 голосов
/ 21 декабря 2010

Привет, это действительно зависит от того, что делает ваша программа, является ли это подходящей структурой или нет.Если методы B, C и D не используются, возможно, для класса Z может быть неуместно расширять A.Так что, может быть, подумайте, если это имеет смыслЧтобы не допустить кодирования ошибки, вы можете создать исключение UnsupportedOperationException (String message) для всех переопределяющих методов.Другая идея может состоять в том, чтобы добавить аннотацию @Deprecated к этому методу.Это должно предупредить вас, если вы случайно используете этот метод в своем коде.Это взломать и злоупотреблять этим.

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