工业网站开发商,网站服务器用什么配置,seo业务培训,自己站网站建造者模式#xff08;Builder Pattern#xff09;#xff0c;又叫生成器模式#xff0c;是一种对象构建模式 它可以将复杂对象的建造过程抽象出来#xff0c;使这个抽象过程的不同实现方法可以构造出不同表现的对象。建造者模式是一步一步创建一个复杂的对象#xff0c;…
建造者模式Builder Pattern又叫生成器模式是一种对象构建模式 它可以将复杂对象的建造过程抽象出来使这个抽象过程的不同实现方法可以构造出不同表现的对象。建造者模式是一步一步创建一个复杂的对象它允许用户只通过指定复杂对象的类型和内容就可 以构建它们用户不需要知道内部的具体构建细节。
简单来说建造者模式允许你按步骤创建复杂的对象同时将对象的构建与其表示分离。
主要解决的问题是当创建一个复杂对象时如果直接在代码中进行对象的创建和初始化会导致代码变得复杂而难以维护。
而建造者模式通过将对象的构建过程委派给不同的建造者使得代码更加清晰、可读并且可以灵活地构建不同的对象表示形式。
当我们需要创建一个对象但该对象具有复杂的构建过程并且构建过程可以有不同的表示形式时可以考虑使用建造者模式。 建造者模式包含4个元素
抽象建造者Builder一个抽象接口规范了产品对象的各个组成成分的建造。具体建造者ConcreteBuilder与应用程序紧密相关的一些类它们在应用程序调用下创建产品的实例。导演者Director调用具体建造者角色来创建产品对象。产品Product一般是一个较为复杂的对象。
优点包括
将对象的构建过程封装在一个建造者类中使得客户端代码与具体构建过程解耦提高了代码的可维护性和可读性。可以灵活地构建不同表示形式的对象通过调整建造者的步骤和配置可以得到不同的对象。可以更好地控制对象的构建过程避免了在代码中直接创建和初始化对象的复杂性。
缺点包括
建造者模式增加了代码的复杂性因为需要定义多个类来实现构建者和产品对象可能会增加项目的工程复杂性。如果产品的属性发生变化需要修改构建者类和产品类可能会引起一定的维护成本。
注意事项与工厂模式的区别是建造者模式更加关注与零件装配的顺序。
案例
我们假设一个快餐店的商业案例其中一个典型的套餐可以是一个汉堡Burger和一杯冷饮Cold drink。汉堡Burger可以是素食汉堡Veg Burger或鸡肉汉堡Chicken Burger它们是包在纸盒中。冷饮Cold drink可以是可口可乐coke或百事可乐pepsi它们是装在瓶子中。
我们将创建一个表示食物条目比如汉堡和冷饮的 Item 接口和实现 Item 接口的实体类以及一个表示食物包装的 Packing 接口和实现 Packing 接口的实体类汉堡是包在纸盒中冷饮是装在瓶子中。
然后我们创建一个 Meal 类带有 Item 的 ArrayList 和一个通过结合 Item 来创建不同类型的 Meal 对象的 MealBuilder。BuilderPatternDemo 类使用 MealBuilder 来创建一个 Meal。 步骤 1
创建一个表示食物条目和食物包装的接口。
public interface Item {public String name();public Packing packing();public float price();
} public interface Packing {public String pack();
} 步骤 2
创建实现 Packing 接口的实体类。
public class Wrapper implements Packing {Overridepublic String pack() {return Wrapper;}
}
public class Bottle implements Packing {Overridepublic String pack() {return Bottle;}
} 步骤 3
创建实现 Item 接口的抽象类该类提供了默认的功能。
public abstract class Burger implements Item {Overridepublic Packing packing() {return new Wrapper();}Overridepublic abstract float price();
}
public abstract class ColdDrink implements Item {Overridepublic Packing packing() {return new Bottle();}Overridepublic abstract float price();
} 步骤 4
创建扩展了 Burger 和 ColdDrink 的实体类。
public class VegBurger extends Burger {Overridepublic float price() {return 25.0f;}Overridepublic String name() {return Veg Burger;}
}
public class ChickenBurger extends Burger {Overridepublic float price() {return 50.5f;}Overridepublic String name() {return Chicken Burger;}
}
public class Coke extends ColdDrink {Overridepublic float price() {return 30.0f;}Overridepublic String name() {return Coke;}
}
public class Pepsi extends ColdDrink {Overridepublic float price() {return 35.0f;}Overridepublic String name() {return Pepsi;}
} 步骤 5
创建一个 Meal 类带有上面定义的 Item 对象。
import java.util.ArrayList;
import java.util.List;public class Meal {private ListItem items new ArrayListItem(); public void addItem(Item item){items.add(item);}public float getCost(){float cost 0.0f;for (Item item : items) {cost item.price();} return cost;}public void showItems(){for (Item item : items) {System.out.print(Item : item.name());System.out.print(, Packing : item.packing().pack());System.out.println(, Price : item.price());} }
} 步骤 6
创建一个 MealBuilder 类实际的 builder 类负责创建 Meal 对象。
public class MealBuilder {public Meal prepareVegMeal (){Meal meal new Meal();meal.addItem(new VegBurger());meal.addItem(new Coke());return meal;} public Meal prepareNonVegMeal (){Meal meal new Meal();meal.addItem(new ChickenBurger());meal.addItem(new Pepsi());return meal;}
} 步骤 7
BuiderPatternDemo 使用 MealBuilder 来演示建造者模式Builder Pattern。
public class BuilderPatternDemo {public static void main(String[] args) {MealBuilder mealBuilder new MealBuilder();Meal vegMeal mealBuilder.prepareVegMeal();System.out.println(Veg Meal);vegMeal.showItems();System.out.println(Total Cost: vegMeal.getCost());Meal nonVegMeal mealBuilder.prepareNonVegMeal();System.out.println(\n\nNon-Veg Meal);nonVegMeal.showItems();System.out.println(Total Cost: nonVegMeal.getCost());}
} 步骤 8
执行程序输出结果 Veg Meal
Item : Veg Burger, Packing : Wrapper, Price : 25.0
Item : Coke, Packing : Bottle, Price : 30.0
Total Cost: 55.0Non-Veg Meal
Item : Chicken Burger, Packing : Wrapper, Price : 50.5
Item : Pepsi, Packing : Bottle, Price : 35.0
Total Cost: 85.5 总结
建造者模式是一种创建型设计模式用于将复杂对象的构建过程与其表示分离。它通过将复杂对象的构建过程分解为多个简单的步骤来实现。在Java中我们可以使用建造者模式来创建复杂对象并且可以根据需要使用不同的建造者来创建不同的表示。建造者模式的优点包括可重用性和易于维护和扩展但它的缺点是代码结构较为复杂。建造者模式适用于需要创建多个相似对象或者需要在不同的上下文中创建不同的对象表示的情况。如果需要创建的对象较为简单可能会使用建造者模式变得过于繁琐。
总之建造者模式是一种非常有用的设计模式可以帮助我们更好地管理对象的构建过程并且使得代码更加易于维护和扩展。如果你需要创建一个复杂的对象或者需要在不同的上下文中创建不同的对象表示建议你考虑使用建造者模式来实现。