当前位置: 首页 > news >正文

建设官方网站e路护航光大成贤建设有限公司网站

建设官方网站e路护航,光大成贤建设有限公司网站,企业网站都有哪些,网架结构厂家引言 建造者模式#xff08;Builder Pattern#xff09;使用多个简单对象一步一步构建成一个复杂的对象。这种类型的设计模式属于建造型模式#xff0c;它提供了一种创建对象的最佳方式。 一个Builder会一步步构建最终的对象。该Builder类是独立于其他对象的。 实现概要 …引言 建造者模式Builder Pattern使用多个简单对象一步一步构建成一个复杂的对象。这种类型的设计模式属于建造型模式它提供了一种创建对象的最佳方式。 一个Builder会一步步构建最终的对象。该Builder类是独立于其他对象的。 实现概要 建造者模式的实现并没有一个特别经典的套路原因是在多数情况下复杂对象的构建往往千奇百怪。但为了更好的理解建造者模式使用的场景我们假设如下的功能需要 因为建造者模式就是为了构建复杂对象为了更加贴近这一点以午餐Meal作为最终要被构建的对象我们假设午餐中分为食物Item和包装Packing—食物包含汉堡Burger和冷饮ColdDrink两种汉堡有鸡肉汉堡ChickenBurger和蔬菜汉堡VegBurger之分冷饮有可口可乐Coke和百事可乐Pepsi之分包装又分为瓶装Bottle和袋装Wrapper两种。 如果你看不懂上面的描述或者已经准备关闭浏览器去做眼睛保健操那么下面的结构图可能对你有所帮助 实现过程 一、创建基础接口 创建食物接口及具体实现类创建包装接口及具体包装类 public interface Item {/** 食物名称*/String name();/** 包装*/Packing packing();/** 总价*/float price(); } public abstract class Burger implements Item {Overridepublic Packing packing() {return new Wrapper();} } public class ChickenBurger extends Burger {Overridepublic String name() {return Chicken Burger;}Overridepublic float price() {return 50.5f;} } public class VegBurger extends Burger {Overridepublic String name() {return Veg Burger;}Overridepublic float price() {return 25.0f;} } public abstract class ColdDrink implements Item {Overridepublic Packing packing() {return new Bottle();} } public class Coke extends ColdDrink {Overridepublic String name() {return Coke;}Overridepublic float price() {return 30.0f;} } public class Pepsi extends ColdDrink {Overridepublic String name() {return Pepsi;}Overridepublic float price() {return 35.0f;} } public interface Packing {String pack(); } public class Bottle implements Packing {Overridepublic String pack() {return Bottle;} } public class Wrapper implements Packing {Overridepublic String pack() {return Wrapper;} } 二、创建目标类型 此例中目标类型即午餐类Meal public class Meal {private ListItem items new ArrayListItem();public Meal addAll(List? extends Item items) {this.items.addAll(items);return this;}public Double getSum() {return this.items.stream().collect(Collectors.summarizingDouble(Item::price)).getSum();}public Double getAverage() {return this.items.stream().collect(Collectors.summarizingDouble(Item::price)).getAverage();}public void showItems() {this.items.forEach(item - {System.out.print(Item : item.name());System.out.print(, Packing : item.packing().pack());System.out.println(, Price : item.price());});} } 三、创建建造者类 public class MealBuilder {public Meal prepareMeal(Item... items) {return new Meal().addAll(Arrays.asList(items));} } 四、测试 public class BuilderPatternDemo {public static void main(String[] args) {MealBuilder mealBuilder new MealBuilder();Meal vegMeal mealBuilder.prepareMeal(new VegBurger(), new Coke());System.out.println(Veg Meal);vegMeal.showItems();System.out.println(Total Cost: vegMeal.getSum());Meal nonVegMeal mealBuilder.prepareMeal(new ChickenBurger(), new Pepsi());System.out.println(\n\nNon-Veg Meal);nonVegMeal.showItems();System.out.println(Total Cost: nonVegMeal.getSum());} } 执行结果 总结 意图建造者模式的用意就是将一个复杂的构建与其表示相分离使得同样的构建过程可以创建不同的表示例如本例中相同的创建午餐的方式但使用不同的基础对象最终得出不一样的套餐。 使用场景一些基础部件不会变而其组合经常变化的时候。主要解决软件系统中有时候会面临“一个复杂对象”的创建工作其通常由多个子对象用一定的算法构成。由于需求的变化这个复杂对象的各个部件经常面临着剧烈的变化但将它们组合在一起的算法相对稳定。 优点建造者独立易扩展便于控制细节风险。 缺点产品必须有共同点范围有限制内部变化复杂会有很多建造类。 鸣谢 《建造者模式》
http://www.pierceye.com/news/802754/

相关文章:

  • 做宠物商品的网站无锡自适应网站开发
  • 网站后台怎样登陆做网站数据库及相关配置
  • 昆明seo网站排名网站代码 输入文字 跳出内容
  • 济南建站公司网站广州市网站设计
  • 网站模板做的比较好的公司网站制作汇报会
  • 个人网站图片海外网站备案
  • 兰州手机网站制作公司哪家好网店分销平台
  • 百度建立自己的网站网络工程师培训课程
  • 微网站的制作过程海南注册公司怎么注册
  • 公司网站制作投标建站行业都扁平化设计
  • 男女做a视频网站wordpress询价功能
  • 网站建设视频百度网盘下载我做网站价格
  • 江苏省建设集团有限公司网站首页东莞网络推广外包
  • 梁平网站建设莱芜网络营销
  • 自学网站建设需要什么学历学校网站建设总结报告
  • 增城新塘网站建设平面设计技术培训机构
  • 游戏网站开发视频运动品牌网页设计
  • 成都比较好的网站建设公司做视频后期的网站
  • 重庆网页搜索排名提升专业seo优化推广
  • 手机免费代理ip网站模板网站的优势有哪些
  • dede地方门户网站模板做网站备案
  • 域名访问网站的知识站酷网官网进入
  • 6入空间网站免费观看wordpress转盘抽奖源码
  • 手机网站怎么开发工具网站开发中如何实现gps定位
  • sql2008做网站焦作网站建设哪家便宜
  • hao123网站源码制作2015最新仿制作链接怎么做
  • 做网站源代码需要买吗做任务得佣金的网站
  • 网站开发php还是jsp中式风格装修效果图
  • 外贸网站建设优化营销昆明网站建设加q.479185700
  • 正安网站建设推荐友情链接