Cet article est un mémo d'étude personnel. J'écris un article motivé par l'obsession que ce que j'entre doit être une sortie. J'écris cet article sur Qiita avec l'espoir que quelqu'un qui le connaît pourra signaler les erreurs et donner des conseils.
Je vis une vie professionnelle en tant qu'ingénieur, mais je n'ai pas bien appris les modèles de conception, alors j'ai essayé d'étudier.
Ce qui est décrit ici https://github.com/ck-fm0211/notes_desigh_pattern Je télécharge sur.
J'ai étudié les modèles de conception (mémo personnel) Partie 1 J'ai étudié les modèles de conception (mémo personnel) Partie 2 J'ai étudié les modèles de conception (mémo personnel) Partie 3 J'ai étudié les modèles de conception (mémo personnel) Partie 4 J'ai étudié les modèles de conception (mémo personnel) Partie 5
――Le modèle de Chaîne de Respoisibilité est un modèle qui vous fait imaginer un état dans lequel ceux qui ont la «responsabilité» sont connectés en forme de «chaîne». --Exemple:
―― Pensez à la décision à l'école
―― La chaîne selon laquelle "la personne responsable décide de ce qu'elle peut juger à sa discrétion et laisse le jugement à la personne suivante en charge si elle ne peut pas juger par elle-même"
# -*- 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("Personne ne pouvait juger. Essayez-le.")
class Question:
"""
Une instance String qui stocke le contenu de la question sous forme de champ,
Il a une instance Level qui représente la difficulté de la question.
"""
def __init__(self, question: str, level: Level):
self._question = question
self._level = level
class Level:
"""
Une valeur de type int qui représente le niveau de difficulté sous forme de champ,
Moins que de comparer sa propre difficulté avec la difficulté de l'argument Level object(Level level)Avoir une méthode
"""
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):
#・ ・ ・
―― En divisant chaque «responsable» en classes, le rôle de chaque responsable peut être limité. «En clarifiant le rôle du responsable et en divisant le responsable en classes, il devient possible de réorganiser avec plus de souplesse la« chaîne »qu'est le flux du jugement. ―― D'un autre côté, il est possible que la vitesse de traitement ralentisse car elle suit la chaîne à chaque fois. ――Il est nécessaire de juger en fonction de la situation si un programme axé sur la vitesse est nécessaire ou si la flexibilité est requise.
--Le modèle de façade est un modèle qui permet d'utiliser simplement la procédure d'utilisation de plusieurs classes existantes en combinaison en créant une classe qui sert de "fenêtre".
«Je suis allé à la bibliothèque pour emprunter un livre, mais je ne sais pas où il se trouve. «J'ai une liste de livres et un livre de prêt, mais je ne sais pas comment les utiliser.
# -*- coding:utf-8 -*-
class BookList:
"""Liste des collections"""
@staticmethod
def search_book(book_name):
location = None
#Rechercher par nom de livre
#Renvoie l'emplacement, le cas échéant, nul dans le cas contraire
return location
class LendingList:
"""Livre de prêt"""
@staticmethod
def check(book_name):
#Consultez le livre de prêt
#Renvoie vrai si loué, faux sinon
return True
class Visitor:
@staticmethod
def main(args):
#Où est le livre que vous souhaitez emprunter?
#Quand et où utilisez-vous quelle méthode?
pass
--Demander au secrétaire ――C'est la "fenêtre"
class Visitor:
@staticmethod
def main(args):
#Demandez au commis au comptoir pour l'emplacement
shisho = Librarian()
location = shisho.search_book("Livre illustré d'insectes")
if location == "Prêt":
print("Est-ce en prêt! !!")
elif location == "Le livre n'est pas en possession":
print("N'est-ce pas! !! !!")
else:
print("Je vous remercie")
class Librarian:
@staticmethod
def search_book(book_name):
#Trouver un livre
location = BookList.search_book(book_name)
#Lorsque l'emplacement du livre n'est pas Aucun (en possession)
if location is not None:
#Vérifiez s'il est prêté
if LendingList.check(book_name):
#Lors de la location
return "Prêt"
else:
#Lorsqu'il n'est pas prêté
return location
else:
#Lorsqu'il n'est pas en possession
return "Le livre n'est pas en possession"
--Application correspondante
# -*- 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
#Dérivation de la possibilité en tenant compte de diverses situations
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)
Recommended Posts