2013-09-27 1 views
0

내가 복잡한 빌더를 작성해야 할 때 빌더를 작성하는 것이 좋습니다. 지금까지였습니다 :작성자를 작성하는 가장 좋은 방법은 nonlocal : python

class Builder(object): 
    def before(self): 
     do.. 
    def build(self): 
     do stuff 
    def after(self): 
     do.. 

나는 건물 매개 변수에 대한 자기 (스레드에 대한 중요한)를 사용하지 않는 명심해야한다 그래서 싱글, 그래서 내가 빌더의 방법 중 많은 매개 변수를 전달하거나, (그들은 미완성 통과해야합니다 하프 - 빌드) 객체. 또는 때마다 내가 좋은 aproach되지 않습니다 새 건물 개체를 만들려면 빌더 개체를 만듭니다. 내가 파이썬 3를 사용하여 시작할 때

그러나, 나는 함수로 빌더 선호 : 그것은

def builder(): 
    param1 = None 
    param2 = None 
    def before(self): 
     do.. 
    def build(): 
     nonlocal param1 
     build object ... 
    def after(self): 
     do.. 
    def ...(self): 
     do.. 

라이터하고 스레드에 안전 할 것입니다되지는? 여기 어떤 위험이 있니? /non/local 다른 곳에서 어떻게 적용 할 수 있습니까? 나는 지금 내가 뭘 찾았는지 패턴에게 I를 빌더 파이썬 aproach을 rething하고

입니다 : 나에게 빌더 클래스와 구축 방법 및 중첩 방법 안에 건물 객체를 사용하는 쉬운 방법의 매개 변수화를 제공

class Builder: 
    def build(self): 
     param = None 
     def _build_step1(): 

.

+0

왜 싱글 톤입니까? – delnan

+0

글쎄, 많은 빌더 객체를 만드는 것을 피하기 위해 (무겁기 때문에 메서드를 선호합니다), 성능이 실제로 중요하지만 테스트 할 시간이없는 sth를 작성합니다. –

+0

나는 당신의 성과에 대한 우려가 완전히 잘못된 것이라고 내기를 기꺼이합니다. 빌더 객체 자체가 작 으면, 싱글 톤의 단점을 줄이는데 필요한 농구대를 뛰어 넘는 것보다 반복적으로 할당 및 할당 해제하는 것이 훨씬 저렴합니다. 빌더에 필요한 거대한 읽기 전용 데이터 구조가있는 경우 여러 클라이언트간에 하나의 빌더를 공유하는 대신 빌더간에 * * * 공유 할 수 있습니다. 싱글 톤을 도입하지 않고도 객체를 캐시 또는 재활용 할 수 있습니다. 당신은 그 디자인 패턴을 오용하고 있습니다. – delnan

답변

0

파이썬에서 Java 패턴 대신 키워드 인수 만 사용해야합니다. 즉, 완벽하고 사용하기 쉽고 더 나은 오브젝트 작성 방법이있는 경우 왜 파이썬에서 빌더 패턴을 사용하는지 알 수 없습니다.

class Person: 
    def __init__(self, name, age=UNKNOWN, gender=MALE): 
     self.name = name 
     self.age = age 
     self.gender = gender 

people.append(Person("Erik")) 
people.append(Person("John", age=27)) 
people.append(Person("Pamela", gender=FEMALE)) 
people.append(Person("OldDude", gender=MALE, age=99)) 
+0

하지만 개체를 ​​작성할 때 구문 분석이 필요하거나 sth가 필요한 경우가 많습니다. 객체 생성자에 대한 매개 변수를 찾기 위해 많은 것들이 있으므로별도의 작성자가 논리를 작성하기를 원합니다. 패턴이 특정 언어입니까? –

+0

예, "패턴"은 일반적으로 "언어 제한에 대한 해결 방법"이라고 말하는 멋진 방법입니다. 대부분의 Java/C#/C++ 패턴은 해당 언어의 표현 제한으로 인해 생깁니다. 하지만 어쩌면 당신의 객체 생성은 정말 ** 복잡하여 전용 빌더 메커니즘을 보증해야합니다 ... 선택적 인수와 일부 내부 도우미/파서 메소드가 인터페이스를 "평범한"파이썬으로 유지하면서도 그렇게해야한다고 생각하기는하지만 복잡합니다. –

+0

실제로 빌더 패턴의 사용을 필요로한다고 생각하는 것이 정확히 무엇인지 궁금 할 것입니다. –