Как создать, настроить и использовать lib / framework в oo-приложении? - PullRequest
0 голосов
/ 20 июня 2020

Я решил разделить последнюю часть этого вопроса здесь на новый вопрос: https://softwareengineering.stackexchange.com/questions/411738/extension-of-classes-where-to-put-behaviour-how-much-direct-access-is-allowe

Если у меня есть библиотека, и я хочу ее использовать, я написал в основном собственный класс. У этого класса есть один метод. В этом коде создания экземпляра библиотеки lib / framework. Иногда есть еще несколько методов, с которыми я не только создаю экземпляр класса, но и использую его. Например, если я хочу запустить http-сервер, у меня есть метод start.

class Container
{

TheLib theLib;

public void init() //or a constructor
{
   //some init of the theLib 
}

public void start() //
{
    theLib.doSomething(...)
    theLib.doSomethingmore(...);
    theLib.start(...);
}

//important!
public TheLib getTheLib()
{
    return this.theLib; //after i started configured it and so on, i want of course use all methods, 
                    which the lib have in some other parts in my application
}


}

Но, похоже, это не лучшее решение. Есть ли какие-нибудь решения лучше, чем OO? Часто я также использую только один метод, собственный класс для этого кажется здесь большими накладными расходами? Открытие библиотеки нарушает инкапсуляцию? Tell-Dont-Ask тоже нарушается?

1 Ответ

1 голос
/ 20 июня 2020

Все зависит от того, что вам действительно нужно, или от того, как у вас есть доступ к вашему экземпляру библиотеки.

public class Container {
    
    private TheLib theLib;
    
    /* #1: Do you already created the instance before? */
    public Container(TheLib theLib) {
        this.theLib = theLib;
    }
    
    /* #2: Do you need to created the instance each time? */
    public Container() {
        this.theLib = new TheLib();
    }
    
    public void start() {
        theLib.doSomething(...)
        theLib.doSomethingmore(...);
        theLib.start(...);
    }
    
    public TheLib getTheLib() {
        return this.theLib;
    }
    
    public static void main(String[] args) {
        /* #1 */
        TheLib theLib = ...;
        Container container = new Container(theLib);

        /* #2 */
        Container container = new Container();
        
        /* Continue the flow of your program */
        container.start();
        
        container.getTheLib().doSomethingEvenMore();
    }
    
}

Или, может быть, вам действительно нужен только один экземпляр вашего класса «Контейнер». В этом случае вы должны посмотреть, как сделать синглтон: Java Синглтон и синхронизация

Anwser: Часто я также использую только один метод, для этого мне нужен собственный класс здесь большие накладные расходы?

Ну, в Java вы не можете выполнять формальное программирование, как в C, поэтому вся строка кода, которую вы пишете или будете использовать, должна быть в классе какая-то. Если ваш фрагмент кода небольшой и на самом деле объект не нужен, функция stati c может сделать работу.

...