초보 엔지니어 총결산 디자인 모델 총결산3
종지
초보 엔지니어 비망록의 현수막.
※ 출처가 누락된 경우
출처:
https://yamakatsusan.web.fc2.com/
https://dackdive.hateblo.jp/
https://www.oreilly.co.jp/books/9784873117393/
builder 모드 개요
복합 대상에 대해 제작 과정이 표현 형식에 의존하지 않도록 함으로써 같은 제작 과정에서 서로 다른 표현 형식의 대상을 생성할 수 있다.
'구축기'는 점차적으로 복합 대상을 만드는 과정에 중점을 둔다.Abstract Factory는 부품의 집합을 강조합니다(간단하든 복잡하든).
복합 대상에 대해 제작 과정이 표현 형식에 의존하지 않도록 함으로써 같은 제작 과정에서 서로 다른 표현 형식의 대상을 생성할 수 있다.
'구축기'는 점차적으로 복합 대상을 만드는 과정에 중점을 둔다.Abstract Factory는 부품의 집합을 강조합니다(간단하든 복잡하든).
클래스 및 시퀀스
wikipedia 참조
실시 방침
# builder側
class AbstractBuilder:
@abstractmethod
def build_part1(self):
pass
@abstractmethod
def build_part2(self):
pass
@abstractmethod
def build_part3(self):
pass
class ConcreteBuilder(AbstractBuilder):
def build_part1(self):
# 実処理を記載
self.do_something() # 処理を実装
def build_part2(self):
# 実処理を記載
self.do_something2() # 処理を実装
def build_part3(self):
return self.get_product() # 処理を実装
# director側
class MyDirector: # 注目すべきは考え方なので、内部の実装は作成するものによる(あくまで一例)
def construct(self):
#生成手順を実装
self.builder.build_part1()
self.builder.build_part2()
return self. builder.build_part3()
@classmethod
def create_director(cls, some_args: obj):
builder_cls = get_builder_cls(some_args) # 処理を実装
return cls(builder_cls())
# client側
def main():
director = MyDirector.create_director("some_args_for_deciding_builder_cls")
product = director.construct()
구현 사례 2_Director 모드 전환 예# director側
class AbstractDirector:
@abstractmethod
def construct(self):
pass
@abstractmethod
def create_director(self):
raise NotImplementedError()
@classmethod
def get_director_cls(cls, some_args: obj):
director_cls = get_director_cls(some_args) # 処理を実装
return director_cls
class MyDirector(AbstractDirector):
def construct():
#生成手順を実装
self.builder.build_part1()
self.builder.build_part2()
return self. builder.build_part3()
@classmethod
def create_director(cls,some_args: obj):
builder_cls = get_builder_cls(some_args) # 処理を実装
return cls(builder_cls())
class YourDirector(AbstractDirector):
def construct():
#生成手順を実装
self.builder.build_ex_part1()
self.builder.build_ex_part2()
return self.builder.build_ex_part3()
@classmethod
def create_director(cls,some_args: obj):
builder_cls = get_builder_cls(some_args) # 処理を実装
return cls(builder_cls())
# client側
def main():
director_cls = AbstractDirector.get_director_cls("some_args_1")
director = director_cls.create_director("some_args_2")
product = director.construct()
이점 및 용도
클라이언트에 의존하지 않고 서로 다른 순서로 같은 대상을 만들 수도 있다
Reference
이 문제에 관하여(초보 엔지니어 총결산 디자인 모델 총결산3), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/speedingrenchon/items/6a180e806b0d05dd2300텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)