2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Das Builder-Muster in Entwurfsmustern ist ein häufig verwendetes Entwurfsmuster für die Objekterstellung, das hauptsächlich zur Lösung komplexer Objektkonstruktionsprobleme verwendet wird. Hier ist eine detaillierte Einführung in den Builder-Modus:
Das Builder-Muster trennt die Konstruktion eines komplexen Objekts von seiner Darstellung, sodass mit demselben Konstruktionsprozess unterschiedliche Darstellungen erstellt werden können. Mit anderen Worten: Es funktioniert, indem es den Bauprozess komplexer Objekte in eine Reihe einfacher Schritte unterteilt und es Benutzern ermöglicht, verschiedene Objekte zu erstellen, indem sie die Reihenfolge und Parameter dieser Schritte festlegen.
Klassen Diagramm
Im Builder-Modus sind in der Regel folgende Rollen enthalten:
Das Builder-Muster eignet sich für die folgenden Szenarien:
Im folgenden Beispiel verwenden wir das Builder-Muster, um ein Hausrenovierungssystem zu entwerfen.Wir werden a definierenHouse
Klassen sind komplexe Objekte, die mehrere Dekorationskomponenten enthalten (z. B. Decken, Farben, Böden, Bodenfliesen usw.).Dann definieren wir aHouseBuilder
Schnittstelle, die abstrakte Methoden zum Erstellen dieser Komponenten enthält. Als nächstes erstellen wir spezifische Builder-Klassen für jeden spezifischen Dekorationsstil (z. B. luxuriöser europäischer Stil, leichter Luxus-Pastoralstil, moderner minimalistischer Stil).Schließlich werden wir a passierenDirector
Klasse, um den Bauprozess zu steuern, aber in diesem Beispiel ist dies möglicherweise nicht notwendig, da wir die komplette Baulogik direkt in der Builder-Klasse definieren können.
Um das Konzept der Dirigentenrolle zu demonstrieren, behalten wir jedoch eine beiDirector
Klasse, aber nur zur Veranschaulichung, tatsächlich kann der Erstellungsprozess direkt in der Builder-Klasse durchgeführt werden.
- // 房屋类
- 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());
- }
- }
Bitte beachten Sie, dass in diesem BeispielDirector
Klassen bringen eigentlich keinen großen Mehrwert, da die gesamte Build-Logik bereits darin gekapselt istHouseBuilder
Die Schnittstelle ist implementiert. Aber in komplexeren AnwendungenDirector
Klassen können verwendet werden, um die Reihenfolge und Logik des Build-Prozesses zu kapseln, insbesondere wenn der Build-Prozess mehrere Builder umfasst.
Aus der obigen Einführung ist ersichtlich, dass das Builder-Muster beim Erstellen komplexer Objekte große Vorteile bietet. Es verbessert die Kapselung und Skalierbarkeit des Codes, indem es den Konstruktionsprozess von der Darstellung trennt und außerdem die Kommunikation zwischen dem Client und dem Spezifischen reduziert Produkt. Grad der Kopplung zwischen.
Wenn dieser Artikel für Ihr Studium hilfreich ist, denken Sie bitte daran, ihn zu liken und zu sammeln.