내 연락처 정보
우편메소피아@프로톤메일.com
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
디자인 패턴 중 빌더 패턴(Builder Pattern)은 일반적으로 사용되는 객체 생성 디자인 패턴으로 복잡한 객체 구성 문제를 해결하는 데 주로 사용됩니다. 빌더 모드에 대한 자세한 소개는 다음과 같습니다.
빌더 패턴은 복잡한 객체의 구성과 표현을 분리하여 동일한 구성 프로세스로 다른 표현을 만들 수 있도록 합니다. 즉, 복잡한 개체의 구축 과정을 일련의 간단한 단계로 나누고 사용자가 이러한 단계의 순서와 매개 변수를 지정하여 다양한 개체를 만들 수 있도록 하는 방식으로 작동합니다.
클래스 다이어그램
빌더 모드에는 일반적으로 다음 역할이 포함됩니다.
빌더 패턴은 다음 시나리오에 적합합니다.
다음 예에서는 빌더 패턴을 사용하여 주택 개조 시스템을 설계해 보겠습니다.우리는House
클래스는 여러 장식 구성 요소(예: 천장, 페인트, 바닥, 바닥 타일 등)를 포함하는 복잡한 개체입니다.그런 다음, 우리는HouseBuilder
이러한 구성 요소를 생성하기 위한 추상 메서드가 포함된 인터페이스입니다. 다음으로, 각각의 특정 장식 스타일(예: 럭셔리 유럽 스타일, 가벼운 럭셔리 목가적 스타일, 현대적인 미니멀리스트)에 대한 특정 빌더 클래스를 만듭니다.마지막으로, 우리는Director
클래스를 사용하여 빌드 프로세스를 안내하지만 이 예제에서는 빌더 클래스에서 직접 전체 빌드 논리를 정의할 수 있으므로 필요하지 않을 수 있습니다.
그러나 지휘자 역할의 개념을 보여주기 위해 우리는Director
클래스이지만 설명 목적으로만 실제로 빌드 프로세스는 빌더 클래스에서 직접 수행될 수 있습니다.
- // 房屋类
- public class House {
- private String ceiling; // 吊顶
- private String paint; // 涂料
- private String floor; // 地板
- private String tiles; // 地砖
-
- // 私有构造函数
- private House() {}
-
- // Getter 方法
- public String getCeiling() {
- return ceiling;
- }
-
- public String getPaint() {
- return paint;
- }
-
- public String getFloor() {
- return floor;
- }
-
- public String getTiles() {
- return tiles;
- }
-
- // 建造者接口
- public interface HouseBuilder {
- HouseBuilder buildCeiling(String ceiling);
- HouseBuilder buildPaint(String paint);
- HouseBuilder buildFloor(String floor);
- HouseBuilder buildTiles(String tiles);
- House build();
- }
-
- // 豪华欧式建造者 ,注意是静态内部类
- public static class LuxuryEuropeanBuilder implements HouseBuilder {
- private House house;
-
- public LuxuryEuropeanBuilder() {
- this.house = new House();
- }
-
- @Override
- public HouseBuilder buildCeiling(String ceiling) {
- house.ceiling = "豪华欧式吊顶: " + ceiling;
- return this;
- }
-
- @Override
- public HouseBuilder buildPaint(String paint) {
- house.paint = "豪华欧式涂料: " + paint;
- return this;
- }
-
- @Override
- public HouseBuilder buildFloor(String floor) {
- house.floor = "豪华欧式地板: " + floor;
- return this;
- }
-
- @Override
- public HouseBuilder buildTiles(String tiles) {
- house.tiles = "豪华欧式地砖: " + tiles;
- return this;
- }
-
- @Override
- public House build() {
- return house;
- }
- }
-
- // ... 可以为其他风格创建类似的建造者类
-
- // 指挥者类(可选,这里主要用于展示概念)
- public static class Director {
- private HouseBuilder builder;
-
- public Director(HouseBuilder builder) {
- this.builder = builder;
- }
-
- // 这里可以添加方法来指导建造过程,但在这个例子中,我们直接在建造者中完成了所有工作
- public House constructHouse() {
- // 假设这是由指挥者指导的步骤,但在这里我们直接返回建造者的结果
- return builder
- .buildCeiling("水晶吊灯")
- .buildPaint("金色镶边涂料")
- .buildFloor("大理石地板")
- .buildTiles("马赛克地砖")
- .build();
- }
- }
-
- // 主函数,用于演示
- public static void main(String[] args) {
- HouseBuilder luxuryBuilder = new LuxuryEuropeanBuilder();
- // Director director = new Director(luxuryBuilder); // 如果使用指挥者
-
- House house = luxuryBuilder
- .buildCeiling("水晶吊灯")
- .buildPaint("金色镶边涂料")
- .buildFloor("大理石地板")
- .buildTiles("马赛克地砖")
- .build();
-
- System.out.println("Ceiling: " + house.getCeiling());
- System.out.println("Paint: " + house.getPaint());
- System.out.println("Floor: " + house.getFloor());
- System.out.println("Tiles: " + house.getTiles());
- }
- }
이 예에서는Director
모든 빌드 로직이 이미 캡슐화되어 있으므로 클래스는 실제로 많은 가치를 추가하지 않습니다.HouseBuilder
인터페이스가 구현됩니다. 하지만 더 복잡한 애플리케이션에서는Director
클래스는 특히 빌드 프로세스가 여러 빌더에 걸쳐 있는 경우 빌드 프로세스의 순서와 논리를 캡슐화하는 데 사용할 수 있습니다.
위의 소개를 통해 빌더 패턴은 복잡한 객체를 구축할 때 큰 장점이 있음을 알 수 있습니다. 이는 구성 프로세스를 표현과 분리하여 코드의 캡슐화 및 확장성을 향상시키고 클라이언트와 특정 제품 사이의 시간을 단축합니다. . 사이의 결합 정도.
이 글이 공부에 도움이 되셨다면 꼭 좋아요와 수집 부탁드립니다.