代码拉取完成,页面将自动刷新
同步操作将从 ryanpenn/dart_in_action 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
/**
建造者模式(Builder Pattern)
意图:将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。
主要解决:主要解决在软件系统中,有时候面临着"一个复杂对象"的创建工作,其通常由各个部分的子对象用一定的算法构成;由于需求的变化,这个复杂对象的各个部分经常面临着剧烈的变化,但是将它们组合在一起的算法却相对稳定。
何时使用:一些基本部件不会变,而其组合经常变化的时候。
如何解决:将变与不变分离开。
*/
main(List<String> args) {
MealBuilder mealBuilder = new MealBuilder();
Meal vegMeal = mealBuilder.prepareVegMeal();
print("Veg Meal");
vegMeal.showItems();
print("Total Cost: ${vegMeal.getCost()}");
Meal nonVegMeal = mealBuilder.prepareNonVegMeal();
print("\n\nNon-Veg Meal");
nonVegMeal.showItems();
print("Total Cost: ${nonVegMeal.getCost()}");
}
//////////////////////////////////////////////////////////////////
///
/// 创建一个表示 食物条目 的接口
///
abstract class Item {
String name();
Packing packing();
double price();
}
///
/// 创建一个表示 食物包装 的接口
///
abstract class Packing {
String pack();
}
///
/// 创建实现 Packing 接口的实体类
///
class Wrapper implements Packing {
@override
String pack() {
return "Wrapper";
}
}
class Bottle implements Packing {
@override
String pack() {
return "Bottle";
}
}
///
/// 创建实现 Item 接口的抽象类,该类提供了默认的功能
///
abstract class Burger implements Item {
@override
Packing packing() {
return new Wrapper();
}
@override
double price();
}
abstract class ColdDrink implements Item {
@override
Packing packing() {
return new Bottle();
}
@override
double price();
}
///
/// 创建扩展了 Burger 和 ColdDrink 的实体类
///
class VegBurger extends Burger {
@override
double price() {
return 25.0;
}
@override
String name() {
return "Veg Burger";
}
}
class ChickenBurger extends Burger {
@override
double price() {
return 50.5;
}
@override
String name() {
return "Chicken Burger";
}
}
class Coke extends ColdDrink {
@override
double price() {
return 30.0;
}
@override
String name() {
return "Coke";
}
}
class Pepsi extends ColdDrink {
@override
double price() {
return 35.0;
}
@override
String name() {
return "Pepsi";
}
}
///
/// 创建一个 Meal 类,带有上面定义的 Item 对象
///
class Meal {
List<Item> _items = List<Item>();
void addItem(Item item) {
_items.add(item);
}
double getCost() {
double cost = 0.0;
for (Item item in _items) {
cost += item.price();
}
return cost;
}
void showItems() {
for (Item item in _items) {
print("Item : ${item.name()}");
print(", Packing : ${item.packing().pack()}");
print(", Price : ${item.price()}");
}
}
}
///
/// 创建一个 MealBuilder 类,实际的 builder 类负责创建 Meal 对象
///
class MealBuilder {
Meal prepareVegMeal() {
Meal meal = new Meal();
meal.addItem(new VegBurger());
meal.addItem(new Coke());
return meal;
}
Meal prepareNonVegMeal() {
Meal meal = new Meal();
meal.addItem(new ChickenBurger());
meal.addItem(new Pepsi());
return meal;
}
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。