빌더 패턴의 정의: 동일한 구성 프로세스가 다른 표현을 만들 수 있도록 복잡한 객체의 구성을 표현에서 분리하는 것을 의미합니다. 이 디자인 패턴을 빌더 모델이라고 합니다. 복잡한 개체를 여러 개의 간단한 개체로 분해한 다음 단계별로 구축합니다. 이는 변경과 불변성을 분리합니다. 즉, 제품의 구성 요소는 변경되지 않은 상태로 유지되지만 각 부분은 유연하게 선택할 수 있습니다.
1. 캡슐화성이 좋고 구성과 표현이 분리됩니다.
2. 확장성이 좋고 각 특정 빌더가 서로 독립적이므로 시스템의 분리에 도움이 됩니다.
3. 클라이언트는 제품의 내부 구성에 대한 세부 사항을 알 필요가 없습니다. 빌더는 다른 모듈에 영향을 주지 않고 점차적으로 생성 프로세스를 개선할 수 있으므로 세부적인 위험을 더 쉽게 제어할 수 있습니다.
1. 제품의 구성품이 동일해야 하므로 사용 범위가 제한됩니다.
2. 제품의 내부 변경이 복잡할 경우 시공사에서도 동시에 수정을 해야 하므로 향후 유지관리 비용이 더 많이 발생하게 됩니다.
빌더 패턴과 팩토리 패턴은 초점이 다릅니다. 빌더 패턴은 구성요소의 조립 프로세스에 중점을 두는 반면, 팩토리 메소드 패턴은 구성요소 생성 프로세스에 더 중점을 두지만 둘을 조합하여 사용할 수 있습니다. .
사례: 기적의 박사 두두 연금술
제품: elixir
Abstract 빌더: 추상 연금술
콘크리트 빌더: 콘크리트 연금술
감독: 기적의 박사 두두
기적의 박사 두도가 나인 변신 엘리를 개선합니다. xir 그리고 대공허 변환 비약
참고: 문제를 피하기 위해 여기에 언급된 비약의 내용에는 비약의 이름과 효과만 포함되어 있으며 재료는 포함되어 있지 않습니다.
elixir 클래스는 elixir의 이름과 효과의 두 가지 속성을 선언합니다.
public class Dan { /* cailiao 丹药的名称 danhuo 丹药的效果*/ private String name; private String xiaoguo; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getXiaoguo() { return xiaoguo; } public void setXiaoguo(String xiaoguo) { this.xiaoguo = xiaoguo; } }
새로운 elixir 객체인 Abstract 클래스는 elixir의 이름을 지정하고 elixir 효과를 할당하는 두 가지 추상 메서드를 선언합니다. 엘릭서를 생성하는 방법이기도 합니다.
//抽象丹方 abstract class DanFang { Dan dan = new Dan(); public abstract void name(); public abstract void xiaoguo(); public Dan getDan() { return dan; } }
특정 레시피 클래스는 레시피 클래스를 상속하고 두 가지 추상 메서드를 구현합니다.
//九转仙丹丹方 public class JiuZhuan extends DanFang { @Override public void name() { dan.setName("九转仙丹"); } @Override public void xiaoguo() { dan.setXiaoguo("原地成仙"); } }
특정 Danfang 클래스는 Danfang 클래스를 상속하고 두 가지 추상 메서드를 구현합니다.
//太虚化神丹丹方 public class Taixu extends DanFang { @Override public void name() { dan.setName("太虚化神丹"); } @Override public void xiaoguo() { dan.setXiaoguo("意念化神"); } }
는 비약 속성, 매개변수를 사용한 구성 방법, 연금술 방법을 선언합니다.
public class DouDou { private final DanFang danLu; public DouDou(DanFang danLu) { this.danLu = danLu; } //炼丹方法 public Dan lian() { //放入材料 danLu.name(); //释放丹火 danLu.xiaoguo(); //成丹 return danLu.getDan(); } }
알약 두 개를 정제하는 중입니다.
public class Demo { public static void main(String[] args) { //炼制九转仙丹 //new一个九转仙丹的丹方 DanFang jiu = new JiuZhuan(); //把丹方给豆豆 DouDou dou = new DouDou(jiu); //炼丹生成丹药 Dan dan = dou.lian(); System.out.printf("丹药名称:%s 丹药效果:%s", dan.getName(), dan.getXiaoguo()); System.out.println(); //炼制太虚化神丹 //new一个九转仙丹的丹方 DanFang tai = new Taixu(); //把丹方给豆豆 DouDou dous = new DouDou(tai); //炼丹生成丹药 Dan dans = dous.lian(); System.out.printf("丹药名称:%s 丹药效果:%s", dans.getName(), dans.getXiaoguo()); } }
위 내용은 Java의 빌더 패턴 사례 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!