博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java中建造者(Builder)设计
阅读量:6971 次
发布时间:2019-06-27

本文共 2859 字,大约阅读时间需要 9 分钟。

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010046908/article/details/50750542

Java中建造者(Builder)设计

1Builder模式的定义
将一个复杂的对象的构建与他的表示分离,使的同样的构建过程可以构建不同的表示。
2Builder模式的使用场景
(1)相同的方法,不同的执行顺序,产生不同的事件结果。
(2)多个部件都可以装配到一个对象中,但是产生的运行结果又不相同。
(3)产品类非常复杂,或者产品类中调用顺序不同产生不同的作用,这时候使用建造者模式非常是适合。
(4)当初始化一个复杂的对象,如好多参数,且很多参数都具有默认值。
3Builder模式的UML图
Product产品类---产品的抽象
Builder--抽象的Builder,规范产品的组件,一般是由子类实现具体的组件过程。
ConcreateBuilder --具体的Builder类
Director--统一的组件过程。
代码的实现
package builder;/** * 抽象deBuilder * @author lidong * */public abstract class Builder {    /**     * 设置主机     * @param board     */	public abstract void buildBorad(String board);	/**	 * 设置显示器	 * @param display	 */	public abstract void buildDisplay(String display);	/**	 * 设置操作系统	 */	public abstract void buildOS();	/**	 * 创建机器	 * @return	 */	public abstract Computer create();		}
package builder;/** * 计算机抽象类 * Product角色 * @author Administrator * */public abstract class Computer {	protected String  mBoard;//主板	protected String  mDisplay;//显示器	protected String  mOS;//系统		protected Computer() {			}	public String getmBoard() {		return mBoard;	}	public void setmBoard(String mBoard) {		this.mBoard = mBoard;	}	public String getmDisplay() {		return mDisplay;	}	public void setmDisplay(String mDisplay) {		this.mDisplay = mDisplay;	}	//抽象方法	public abstract void setOS();	@Override	public String toString() {		return "Computer [mBoard=" + mBoard + ", mDisplay=" + mDisplay				+ ", mOS=" + mOS + "]";	}			}
package builder;/** * 具体的builder类,Window电脑 * @author lidong * */public class WindowBuilder extends Builder {		private Computer mComputer = new  WindowPC();	@Override	public void buildBorad(String board) {		mComputer.setmBoard(board);			}	@Override	public void buildDisplay(String display) {		mComputer.setmDisplay(display);			}	@Override	public void buildOS() {		mComputer.setOS();	}	@Override	public Computer create() {		return mComputer;	}}
package builder;/** * window 电脑 * @author lidong * */public class WindowPC extends Computer{	protected WindowPC() {		super();	}	@Override	public void setOS() {		mOS = "window 7";			}}
package builder;/** * Director  负责构建Compurter * @author lidong * */public class Dirctor {		Builder mBuilder = null;	public Dirctor(Builder mBuilder) {		super();		this.mBuilder = mBuilder;	}	/**	 * 构建对象	 * @param borad	 * @param display	 */	public void construct(String borad,String display) {      mBuilder.buildBorad(borad);      mBuilder.buildDisplay(display);      mBuilder.buildOS();	}}
测试类:
package builder;public class Test {	public static void main(String[] args) {    		//构造器		Builder builder1 = new WindowBuilder();		Dirctor pcDirctor1 = new  Dirctor(builder1);		pcDirctor1.construct("英特尔2", "1G显卡");		System.out.println("Computer  info ="+builder1.create().toString());	}		}
代码下载地址:
https://github.com/lidong1665/JAVA_DESIGN_PATTERNS/tree/master/JAVA_DESIGN_PATTERNS
你可能感兴趣的文章
Poj(2421),Prim最小生成树
查看>>
UPS故障案例集(二)
查看>>
[luogu 3803]【模板】多项式乘法
查看>>
MySQL中的锁、隔离等级和读场景
查看>>
流弊博客集锦(updating)
查看>>
dedecms 的这个dede:arclist里怎么调用全局变量?
查看>>
eclipse上跑项目越来越慢的解决办法
查看>>
个人开公司的流程,以后用得着(经典)(转)
查看>>
跟踪内核启动过程CONFIG_DEBUG_LL【转自】
查看>>
系统数据文件和信息
查看>>
Laravel 程序架构设计思路:使用动作类
查看>>
Java线程池实现原理与技术(ThreadPoolExecutor、Executors)
查看>>
Linux内核读书笔记第五周链接
查看>>
工厂模式(Factory Patter)
查看>>
痛苦的 01 矩阵(和式推导)
查看>>
我的Python成长之路---第三天---Python基础(11)---2016年1月16日(雾霾)
查看>>
intellij idea 用法
查看>>
Fabric项目学习总结
查看>>
【转】sqlserver临时表操作
查看>>
计算机等级考试成绩查询系统的设计与实现vfp
查看>>