私の連絡先情報
郵便メール:
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
デザイン パターンのビルダー パターンは、一般的に使用されるオブジェクト作成デザイン パターンであり、主に複雑なオブジェクト構築の問題を解決するために使用されます。ここではビルダー モードの詳細を紹介します。
ビルダー パターンは、複雑なオブジェクトの構築をその表現から分離し、同じ構築プロセスで異なる表現を作成できるようにします。言い換えれば、複雑なオブジェクトの構築プロセスを一連の単純なステップに分割し、ユーザーがこれらのステップの順序とパラメータを指定することでさまざまなオブジェクトを作成できるようにすることで機能します。
クラス図
ビルダー モードには通常、次のロールが含まれます。
ビルダー パターンは次のシナリオに適しています。
次の例では、Builder パターンを使用して住宅改修システムを設計します。を定義します。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
特にビルド プロセスが複数のビルダーにまたがる場合、クラスを使用してビルド プロセスの順序とロジックをカプセル化できます。
上記の紹介から、ビルダー パターンは、複雑なオブジェクトを構築するときに、構築プロセスを表現から分離することでコードのカプセル化とスケーラビリティを向上させ、クライアントと特定のオブジェクト間の通信も削減するという大きな利点があることがわかります。間の結合度。
この記事があなたの研究に役立つ場合は、「いいね」を押して収集してください。