[PYTHON] Ich habe über Designmuster (persönliches Memo) Teil 6 (Muster der Verantwortungskette, Fassadenmuster, Vermittlermuster) studiert.

Einführung

Dieser Artikel ist ein persönliches Studienmemo. Ich schreibe einen Artikel, der von der Besessenheit getrieben ist, dass das, was ich eingebe, ausgegeben werden muss. Ich schreibe diesen Artikel über Qiita in der Hoffnung, dass jemand, der damit vertraut ist, auf Fehler hinweisen und Ratschläge geben kann.

Ich lebe ein Berufsleben als Ingenieur, aber ich habe nicht richtig über Entwurfsmuster gelernt, also habe ich versucht zu studieren.

Was ist hier beschrieben https://github.com/ck-fm0211/notes_desigh_pattern Ich lade auf.

Vergangenes Protokoll

Ich habe über Entwurfsmuster (persönliches Memo) Teil 1 studiert Ich habe über Entwurfsmuster (persönliches Memo) Teil 2 studiert Ich habe über Entwurfsmuster (persönliches Memo) Teil 3 studiert Ich habe über Entwurfsmuster (persönliches Memo) Teil 4 studiert Ich habe über Entwurfsmuster (persönliches Memo) Teil 5 studiert

Muster der Verantwortungskette

――Das Muster der Kette der Verantwortlichkeit ist ein Muster, das Sie sich einen Zustand vorstellen lässt, in dem diejenigen, die "Verantwortung" haben, in einer "Ketten" -Form verbunden sind. --Beispiel:

Eigentlich verwenden

Gegenstand

――Denken Sie über die Entscheidung in der Schule nach --Student A "Wie viel kostet der Snack für den Ausflug?" --Rookie-Lehrer "bis zu 300 Yen" ← Genehmigung des neuen Lehrers --Student B "Passen Bananen in einen Snack?" --Rookie Lehrer "Ich kann nicht beurteilen" --Veteranischer Lehrer "Ich kann den Snack nicht betreten" ← Entscheidung des Veteranenlehrers --Students Eltern "Kann ich ein Handy haben?" --Rookie-Lehrer / Veteranenlehrer "Ich kann nicht beurteilen"

――Die Kette, dass "die verantwortliche Person nach eigenem Ermessen entscheidet, was sie beurteilen kann, und das Urteil der nächsten verantwortlichen Person überlässt, wenn sie nicht selbst beurteilen kann"

# -*- coding:utf-8 -*-
from abc import ABCMeta, abstractmethod


class Responsible(metaclass=ABCMeta):

    def __init__(self, responsible_person: str):
        self._responsible_person = responsible_person
        self._next_level: Responsible = None

    @abstractmethod
    def set_next(self, next_level):
        self._next_level = next_level
        return self._next_level

    @abstractmethod
    def be_able_to_judge(self, question: Question) -> bool:
        pass

    @staticmethod
    @abstractmethod
    def judge(question: Question):
        pass

    @abstractmethod
    def put_question(self, question: Question):
        if self.be_able_to_judge(question):
            self.judge(question)
        elif self._next_level is not None:
            self._next_level.put_question(question)
        else:
            print("Niemand konnte beurteilen. Versuch es.")


class Question:
    """
Eine String-Instanz, die den Inhalt der Frage als Feld speichert.
Es hat eine Level-Instanz, die die Schwierigkeit der Frage darstellt.
    """

    def __init__(self, question: str, level: Level):
        self._question = question
        self._level = level


class Level:
    """
Ein Wert vom Typ int, der den Schwierigkeitsgrad als Feld darstellt.
LessThan vergleicht seine eigene Schwierigkeit mit der Schwierigkeit des Argument-Level-Objekts(Level level)Habe eine Methode
    """

    def __init__(self, level: int):
        self._level: int = level

    def less_than(self, level: Level):
        pass


class RookieTeachee(Responsible):

    def __init__(self, responsible_person):
        super().__init__(responsible_person)
        self._level = Level(2)

    def be_able_to_judge(self, question: Question):
        if question._level.less_than(self._level):
            return True

        return False

    @staticmethod
    def judge(question: Question):
        #・ ・ ・

――Durch die Aufteilung jeder "verantwortlichen Person" in Klassen kann die Rolle jeder verantwortlichen Person eingeschränkt werden. ――Durch Klärung der Rolle der verantwortlichen Person und Aufteilung der verantwortlichen Person in Klassen wird es möglich, die „Kette“, die den Fluss des Urteils darstellt, flexibler neu anzuordnen. ――Auf der anderen Seite ist es möglich, dass sich die Verarbeitungsgeschwindigkeit verlangsamt, da sie jedes Mal der Kette folgt. ―― Je nach Situation muss beurteilt werden, ob ein geschwindigkeitsorientiertes Programm oder Flexibilität erforderlich ist.

Zusammenfassung der Muster der Verantwortungskette

ChainofResponsibility.png

Fassadenmuster

--Das Fassadenmuster ist ein Muster, mit dem Sie einfach mehrere vorhandene Klassen in Kombination verwenden können, indem Sie eine Klasse erstellen, die als "Fenster" dient.

Eigentlich verwenden

Gegenstand

»Ich bin in die Bibliothek gegangen, um mir ein Buch auszuleihen, aber ich weiß nicht, wo es ist. ――Ich habe eine Liste mit Büchern und ein Leihbuch, aber ich weiß nicht, wie ich sie verwenden soll.

# -*- coding:utf-8 -*-


class BookList:
    """Sammlungsliste"""

    @staticmethod
    def search_book(book_name):
        location = None
        #Suche nach Buchnamen
        #Gibt den Speicherort zurück, falls vorhanden, andernfalls null
        return location


class LendingList:
    """Leihbuch"""

    @staticmethod
    def check(book_name):
        #Überprüfen Sie das Leihbuch
        #Gibt true zurück, wenn gemietet, andernfalls false
        return True


class Visitor:
    @staticmethod
    def main(args):
        #Wo ist das Buch, das Sie ausleihen möchten?
        #Wann und wo wenden Sie welche Methode an?
        pass

class Visitor:
    @staticmethod
    def main(args):
        #Fragen Sie den Angestellten am Schalter nach dem Standort
        shisho = Librarian()
        location = shisho.search_book("Bilderbuch für Insekten")
        if location == "Ausleihe":
            print("Ist es ausgeliehen! !!")
        elif location == "Das Buch ist nicht im Besitz":
            print("Ist es nicht! !! !!")
        else:
            print("Vielen Dank")


class Librarian:
    @staticmethod
    def search_book(book_name):
        #Finde ein Buch
        location = BookList.search_book(book_name)
        #Wenn der Ort des Buches nicht None ist (im Besitz)
        if location is not None:
            #Überprüfen Sie, ob es ausgeliehen ist
            if LendingList.check(book_name):
                #Bei der Anmietung
                return "Ausleihe"
            else:
                #Wenn nicht ausgeliehen
                return location
        else:
            #Wenn nicht im Besitz
            return "Das Buch ist nicht im Besitz"

Zusammenfassung des Fassadenmusters

Facade.png

Vermittlermuster

Eigentlich verwenden

Gegenstand

# -*- coding:utf-8 -*-


class Concierge:

    def __init__(self):
        self._user_dict = {}

    def add_user(self, user: User):
        self._user_dict[user.get_name()] = user

    @staticmethod
    def consultation(colleagueInLove: User, secretLover: User):
        possibility = 0
        #Ableitung der Möglichkeit unter Berücksichtigung verschiedener Situationen
        return possibility


class User:
    def __init__(self):
        self._name = None

    def get_name(self):
        return self._name


class John(User):

    def __init__(self):
        super().__init__()
        self._name = "John"
        self._secret_lover = None
        self._tension = None
        self._mediator = Concierge()

    def get_name(self):
        return self._name

    def set_secret_lover(self, user: User):
        self._secret_lover = user

    def needs_advice(self):
        self._tension = self._mediator.consultation(self, self._secret_lover)

Zusammenfassung der Mediatormuster

Mediator.png

Recommended Posts

Ich habe über Designmuster (persönliches Memo) Teil 6 (Muster der Verantwortungskette, Fassadenmuster, Vermittlermuster) studiert.
Ich habe über Designmuster (persönliches Memo) Teil 3 (Prototypmuster, Builder-Muster) studiert.
Ich habe über Designmuster (persönliches Memo) Teil 5 (Verbundmuster, Dekorationsmuster, Besuchermuster) studiert.
Ich habe über Designmuster studiert (persönliches Memo) Teil 4 (AbstractFactory-Muster, Brückenmuster, Strategiemuster)
Ich habe über Entwurfsmuster (persönliches Memo) Teil 8 (Proxy-Muster, Befehlsmuster, Interpreter-Muster) studiert.
Ich habe über Designmuster (persönliches Memo) Teil 7 (Beobachtermuster, Erinnerungsmuster, Zustandsmuster, Fliegengewichtsmuster) studiert.
[Viererbande] Designmuster lernen - Kette der Verantwortung
Lernen Sie das Entwurfsmuster "Chain of Responsibility" in Python
Muster der Verantwortungskette in Java
[Viererbande] Design Pattern Learning - Vermittler
[Viererbande] Designmuster lernen - Fassade
Entwurfsmuster #Facade