设计模式简介

设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。

设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了重用代码、让代码更容易被他人理解、保证代码可靠性。 毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大厦的一块块砖石一样。项目中合理地运用设计模式可以完美地解决很多问题,每种模式在现实中都有相应的原理来与之对应,每种模式都描述了一个在我们周围不断重复发生的问题,以及该问题的核心解决方案,这也是设计模式能被广泛应用的原因。

建造者模式

建造者模式(Builder Pattern)使用多个简单的对象一步一步构建成一个复杂的对象。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。

一个 Builder 类会一步一步构造最终的对象。该 Builder 类是独立于其他对象的。

优点: 1、建造者独立,易扩展。 2、便于控制细节风险。

缺点: 1、产品必须有共同点,范围有限制。 2、如内部变化复杂,会有很多的建造类。

实现

/*** 包装接口* @author Administrator**/
public interface Packing {public String pack();
}
/*** 食品条目接口* @author Administrator**/
public interface Item {public String name();public Packing packing();public float price();
}
/*** 纸包装实现了包装接口* @author Administrator**/
public class Wrapper implements Packing {@Overridepublic String pack() {return "Wrapper";}}
/*** 瓶子 实现了包装接口* @author Administrator**/
public class Bottle implements Packing {@Overridepublic String pack() {return "Bottle";}}
/*** 汉堡包抽象类 实现了条目接口* @author Administrator**/
public abstract class Burger implements Item {@Overridepublic Packing packing() {return new Wrapper();}@Overridepublic abstract float price();
}
/*** 鸡肉汉堡包继承了汉堡包类* @author Administrator**/
public class ChickenBurger extends Burger {@Overridepublic float price() {return 50.5f;}@Overridepublic String name() {return "Chicken Burger";}
}
/*** 蔬菜汉堡包继承汉堡包类* @author Administrator**/
public class VegBurger extends Burger {@Overridepublic float price() {return 25.0f;}@Overridepublic String name() {return "Veg Burger";}
}
/*** 冰饮抽象类实现了条目接口* @author Administrator**/
public abstract class ColdDrink implements Item {@Overridepublic Packing packing() {return new Bottle();}@Overridepublic abstract float price();
}
/*** 可口可乐继承了冰饮类* @author Administrator**/
public class Coke extends ColdDrink {@Overridepublic float price() {return 30.0f;}@Overridepublic String name() {return "Coke";}
}
/*** 百事可乐 继承 冰饮类* @author Administrator**/
public class Pepsi extends ColdDrink {@Overridepublic float price() {return 35.0f;}@Overridepublic String name() {return "Pepsi";}
}
/*** 一餐包含的食物及饮料* * @author Administrator**/
public class Meal {private List<Item> items = new ArrayList<Item>();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());}}
}
/*** 一餐的构建* @author Administrator**/
public class MealBuilder {/*** 准备蔬菜餐* @return*/public Meal prepareVegMeal (){Meal meal = new Meal();meal.addItem(new VegBurger());meal.addItem(new Coke());return meal;}/*** 准备没有蔬菜的一餐 肉* @return*/public Meal prepareNonVegMeal (){Meal meal = new Meal();meal.addItem(new ChickenBurger());meal.addItem(new Pepsi());return meal;}
}
public class Demo {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());}}

设计模式の建造者模式相关推荐

  1. Python设计模式-建造者模式

    Python设计模式-建造者模式 代码基于3.5.2,代码如下; #coding:utf-8 #建造者模式 class Burger():name = ""price = 0.0d ...

  2. 说说设计模式~建造者模式(Builder)

    建造者模式是我的"设计模式"里创建型模式里的最后一篇,这种模式在实现中,很多架构都用到了,如MVC,MVP,MVVM,它们都是有建造者模式的精髓的,即,创建与表现分享,我们的MVC ...

  3. 设计模式 建造者模式_设计模式:建造者

    设计模式 建造者模式 有时需要在应用程序中创建一个复杂的对象. 一种解决方案是Factory模式,另一种是Builder设计模式. 在某些情况下,您甚至可以结合使用这两种模式. 但是在本文中,我想研究 ...

  4. 设计建造者模式java代码,Java设计模式-建造者模式

    定义 Separate the construction of a complex object from its representation so that the sameconstructio ...

  5. python创造者_python 设计模式-建造者模式

    问题:在上一篇python设计模式:抽象工厂模式中,我们尝试用抽象工厂模式规范化了 Pizza 原材料的供应以及 Pizza 的创建.但是我们忽略了一个问题,那就是每种 Pizza 的烘焙时间依赖于生 ...

  6. java设计模式-建造者模式

    概念:使用多个简单的对象一步一步构建成一个复杂的对象.这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式. 意图:将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示. ...

  7. 设计模式-建造者模式(转自:http://www.cnblogs.com/cbf4life/archive/2010/01/14/1647710.html)...

    11.1 变化是永恒的 又是一个周三,快要下班了,老大突然拉住我,喜滋滋地告诉我:"牛叉公司很满意我们做的模型,又签订了一个合同,把奔驰.宝马的车辆模型都交给我们公司制作了,不过这次又额外增 ...

  8. 大话设计模式—建造者模式

    建造者模式(Builder Pattern)使用多个简单的对象一步一步构建成一个复杂的对象.这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式. 一个 Builder 类会一步一步构造最 ...

  9. 我的Java设计模式-建造者模式

    在未上大学之前,一直有个梦想"I have a dream!",就是能成为一位汽车工程师,一直幻想着开着自己设计的汽车飞奔在公路上,迷倒了万千少女.咳咳~~虽然现在没实现我的dre ...

  10. Java常用设计模式————建造者模式

    引言 建造者模式(Builder Pattern)使用多个简单对象一步一步构建成一个复杂的对象.这种类型的设计模式属于建造型模式,它提供了一种创建对象的最佳方式. 一个Builder会一步步构建最终的 ...

最新文章

  1. 【收集】Web开发工具
  2. linux 记一次链路聚合
  3. Python面向对象-特殊成员
  4. Pandas数据排序,人人都能学会的几种方法
  5. Android开发之Android studio4.1查看app布局的方法 | 使用布局检查器和布局验证工具调试布局
  6. 求android 中串口的发送接收数据代码
  7. 银联Apple Pay 总结
  8. php删除oracle数据记录日志文件,Oracle手动切换日志文件和清空日志文件
  9. Centos7上openVP的另一种使用方式,实现访问控制!
  10. Android BottomNavigationBar导航栏
  11. 【VRPSD】基于matlab蚁群算法求解运钞车路径规划问题【含Matlab源码 1511期】
  12. [影视源码]全民影院源码 综合影视HTML源码 无需更新搭建即可用
  13. win10安装时有个修复计算机,电脑开机提示自动修复怎么办?win10电脑开机提示自动修复教程...
  14. PP报工确认bapi:BAPI_PRODORDCONF_CREATE_TT
  15. 【调剂】上海科技大学信息学院2023年硕士招生调剂公告
  16. X265(HEVC编码器)在VS2015下的编译和使用
  17. SpringCloud 学习笔记系列03--Hystrix熔断器
  18. 图解JVM垃圾回收机制
  19. 本科毕业设计(论文)外文翻译基本规范
  20. 394所!2022年最新ESI大学排名出炉

热门文章

  1. JavaWeb(引用-->狂神学习笔记)2021-08
  2. jfreechart学习笔记三 带刻度的蜘蛛图
  3. Webify个人网站扶持计划:免费托管你的网站
  4. python爬取vip小说章节_怎么用python爬sf轻小说文库的vip章节小说
  5. 关于 static auto x = []()的用法解析
  6. php环境建站助手,网站管理助手建站使用说明
  7. 【毕业N年系列】 毕业第五年
  8. 会html5逻辑性强吗,逻辑思维强的五种表现(逻辑思维能力可能天生就比别人强)...
  9. 使用sale数据库,统计全部商品的平均价格,以及文具类商品的平均价格
  10. labview 上位机软件开发——实用技巧1000例