Abstract Factory - ja, czy autor książki tego nie rozumiemy?

0

Czytam właśnie książkę "Hands-On Design Patterns with C# and .NET Core" i wzorzec "abstract factory" został tam przedstawiony jakoś tak bez wytłumaczenia, tylko na przykładzie - i to moim zdaniem złym, bo nie widzę tutaj żadnego tworzenia obiektu. Zawsze mi się wydawało, że w tym wzorcu chodzi o to, że musi być jakaś metoda, która tworzy instancje obiektów, których potrzebujemy. W załączniku wrzucam te 6 stron z hakiem jakby komuś się chciało zerknąć.

Edit. Chyba, że chodzi o metodę GetCommand, ale nigdzie to nie jest wytłumaczone. Dalej jest omówienie SOLID, jakiś przykładowy test i rozdział się kończy.

Edit2. Usuwam załącznik, bo trochę piractwo

0

Ani jedno ani drugie. Po prostu nie umiesz czytać. Przecież oni tam jeszcze do tego Factory nie doszli bo robią co chwila dygresje :D Przeczytaj jeszcze ze 20 stron i pewnie się pojawi.

1

Bo właśnie sam wzorzec nie przewiduje tworzenia obiektów ani nawet klas a jedynie ich interfejsu.
Dobrym przykładem jest abstrakcja np. drukarki fiskalnej.
Każda drukarka generalnie robi to samo jednak z każdą komunikujemy się inaczej z jednymi przez port szeregowy z innymi przez USB jeszcze innymi przez USB albo blueTooth.
W tym przypadku nas to nie interesuje. Celem jest zamodelowanie interfejsu klasy, do którego możemy zlecić wydrukowanie paragonu z listą pozycji : PRODUKT, CENA, PODATEK i tyle ...
Sam problem komunikacji pozostawiamy klasom, które z tego interfejsu będą korzystać.

5

title

0

W jednej z książek przeczytałem bardzo fajny opis abstract factory.
Wyobraź sobie, że tworzysz aplikację okienkową na różne systemy. I teraz musisz stworzyć button. Co masz na pewno? Interfejs IButton, który symbolizuje Twój przycisk.
Teraz masz fabrykę elementów gui, np:

class GUIFactory
{
    public IButton CreateButton()
    {
          return new Button(); //hmmm, jaki k... button?
    }
}

Czy to Cię uszczęśliwia? No tak nie do końca. Z tego powodu, że inny button będzie tworzony dla Windows, inny dla MACa, a jeszcze inny dla Androida.
Więc możemy wprowadzić fabrykę abstrakcyjną. Spójrz na to:

interface IGuiFactory
{
     IButton CreateButton();
}

Następnie tworzysz "fabrykę fabryk"

interface ISystemFactory
{
    IGuiFactory GetGuiFactory();
}

Teraz w różnych systemach, co innego zwróci implementacja ISystemFactory, może być tak:

class WindowsSystemFactory: ISystemFactory
{
    IGuiFactory GetGuiFactory()
    {
        return WindowsGuiFactory.Instance;
    }
}

Następnie WindowsGuiFactory może wyglądać tak:

class WindowsGuiFactory: IGuiFactory
{
    public IButton CreateButton()
    {
        return new WindowsButton();
    }
}

Tutaj IGuiFactory jest właśnie taką fabryką abstrakcyjną.

1 użytkowników online, w tym zalogowanych: 0, gości: 1