java设计模式(创建型)之生成器模式
来源:互联网 发布:淘宝领优惠券的网站 编辑:程序博客网 时间:2024/06/04 17:53
第0章:简介
生成器模式定义:将一个复杂对象的构建与它的表示分离,使得同样地构建过程可以创建不同的表示。
生成器模式的实质:分离整体构建算法和部件构建
参考:http://chjavach.iteye.com/blog/1617078,研磨设计模式(书籍),大话设计模式(书籍)
模式图:
待补充第1章:实践
第0节:简单生成器模式
(1)生成器接口(Builder.java)
package com.mcc.core.designPattern.build.builder.simpleBuilder;/**
* 生成器接口,这里是对象的构建表示,这里不要求构建过程
*
* 生成器模式的定义:将一个复杂对象的构建与它的表示分离,使得同样地构建过程可以创建不同的表示。
* 生成器模式的表示:分离整体构建算法和部件构建
*
* @author <a href="mailto:417877417@qq.com">menergy</a>
* DateTime: 14-3-9 下午12:54
*/
public interface Builder {
//构建步骤1
public void buildStep1();
//构建步骤2
public void buildStep2();
//构建步骤3
public void buildStep3();
}
(2)生成器A类(BuilderImplA.java)
package com.mcc.core.designPattern.build.builder.simpleBuilder;/**
* 生成器A
*
* @author <a href="mailto:417877417@qq.com">menergy</a>
* DateTime: 14-3-9 下午1:01
*/
public class BuilderImplA implements Builder {
@Override
public void buildStep1() {
System.out.println("生成器A构建步骤1");
}
@Override
public void buildStep2() {
System.out.println("生成器A构建步骤2");
}
@Override
public void buildStep3() {
System.out.println("生成器A构建步骤3");
}
}
(3)生成器B类(BuilderImplB.java)
package com.mcc.core.designPattern.build.builder.simpleBuilder;/**
* 生成器B
*
* @author <a href="mailto:417877417@qq.com">menergy</a>
* DateTime: 14-3-9 下午1:03
*/
public class BuilderImplB implements Builder {
@Override
public void buildStep1() {
System.out.println("生成器B构建步骤1");
}
@Override
public void buildStep2() {
System.out.println("生成器B构建步骤2");
}
@Override
public void buildStep3() {
System.out.println("生成器B构建步骤3");
}
}
(4)指导器类(Director.java)
package com.mcc.core.designPattern.build.builder.simpleBuilder;/**
* 指导器,指导使用生成器的接口来生成目标产品
*
* @author <a href="mailto:417877417@qq.com">menergy</a>
* DateTime: 14-3-9 下午1:06
*/
public class Director {
//当前需要使用的生成器对象
private Builder builder;
/**
* 构造方法,传入生成器
* @param builder
*/
public Director(Builder builder){
this.builder = builder;
}
/**
* 指导生成器构建产品,这里控制构建流程
*/
public void build(){
//构建步骤1
builder.buildStep1();
//构建步骤2
builder.buildStep2();
//构建步骤3
builder.buildStep3();
}
}
第1节:复杂生成器模式(不带约束条件)
(1)复杂对象生成器类(ComplexBuilder.java)
package com.mcc.core.designPattern.build.builder.unconstraintBuilder;/**
* 复杂对象生成器,不对属性加约束条件
*
* @author <a href="mailto:417877417@qq.com">menergy</a>
* DateTime: 14-3-9 下午4:08
*/
public class ComplexBuilder {
//必须初始属性
private String property1;
private String property2;
//非必须初始属性
private String property3;
private String property4;
/**
* 构造器,传入必须初始属性
* @param property1
* @param property2
*/
public ComplexBuilder(String property1,String property2){
this.property1 = property1;
this.property2 = property2;
}
/**
* 设置property3属性值
* @param property3
* @return
*/
public ComplexBuilder setProperty3(String property3){
this.property3 = property3;
return this;
}
/**
* 设置property4属性值
* @param property4
* @return
*/
public ComplexBuilder setProperty4(String property4){
this.property4 = property4;
return this;
}
/**
* 创建真正的对象并返回
* @return
*/
public ComplexObject build(){
return new ComplexObject(this);
}
//提供getter方法供外部访问,不提供setter方法
public String getProperty1() {
return property1;
}
public String getProperty2() {
return property2;
}
public String getProperty3() {
return property3;
}
public String getProperty4() {
return property4;
}
}
(2)复杂对象类(ComplexObject.java)
package com.mcc.core.designPattern.build.builder.unconstraintBuilder;/**
* 复杂对象
*
* @author <a href="mailto:417877417@qq.com">menergy</a>
* DateTime: 14-3-9 下午4:00
*/
public class ComplexObject {
private String property1;
private String property2;
private String property3;
private String property4;
/**
* 构造器,访问级别是同包能访问
* @param builder
*/
ComplexObject(ComplexBuilder builder){
this.property1 = builder.getProperty1();
this.property2 = builder.getProperty2();
this.property3 = builder.getProperty3();
this.property4 = builder.getProperty4();
}
/**
* 其它操作
*/
public void someMethod(){
System.out.println("调用复杂对象的操作方法");
}
}
(3)客户端测试类(Client.java)
package com.mcc.core.designPattern.build.builder.unconstraintBuilder;/**
* 客户端测试
*
* @author <a href="mailto:417877417@qq.com">menergy</a>
* DateTime: 14-3-9 下午4:23
*/
public class Client {
public static void main(String args[]){
//创建生成器
ComplexBuilder builder = new ComplexBuilder("value1","value2");
//生成对象,拼接方式设置非必须属性的值
ComplexObject complexObject = builder.setProperty3("value3").setProperty4("value4").build();
//调用对象其它操作
complexObject.someMethod();
}
第2节:复杂生成器模式(带约束条件)
(1)复杂对象(含构建)类(ComplexObject.java)
package com.mcc.core.designPattern.build.builder.constraintBuilder;/**
* 复杂对象,融入构建方式,对属性过滤
*
* @author <a href="mailto:417877417@qq.com">menergy</a>
* DateTime: 14-3-9 下午4:33
*/
public class ComplexObject {
private String property1;
private String property2;
private String property3;
private String property4;
/**
* 构造器,访问级别私有
* @param builder
*/
private ComplexObject(ComplexBuilder builder){
}
/**
* 其它操作
*/
public void someMethod(){
System.out.println("调用复杂对象的操作方法");
}
/**
* 类级内部类,构建对象
*/
public static class ComplexBuilder{
private String property1;
private String property2;
private String property3;
private String property4;
/**
* 构造器,传入必须初始属性
* @param property1
* @param property2
*/
public ComplexBuilder(String property1,String property2){
this.property1 = property1;
this.property2 = property2;
}
/**
* 设置property3属性值
* @param property3
* @return
*/
public ComplexBuilder setProperty3(String property3){
this.property3 = property3;
return this;
}
/**
* 设置property4属性值
* @param property4
* @return
*/
public ComplexBuilder setProperty4(String property4){
this.property4 = property4;
return this;
}
/**
* 创建真正的对象并返回
* @return
*/
public ComplexObject build(){
//这里是构建前对属性的过滤逻辑,这里不做过滤
//返回构建的复杂对象
return new ComplexObject(this);
}
}
}
(2)客户端测试类(Client.java)
package com.mcc.core.designPattern.build.builder.constraintBuilder;/**
* 客户端测试类
*
* @author <a href="mailto:417877417@qq.com">menergy</a>
* DateTime: 14-3-9 下午4:42
*/
public class Client {
public static void main(String args[]){
//创建构建器
ComplexObject.ComplexBuilder builder = new ComplexObject.ComplexBuilder("value1","value2");
//构建对象
ComplexObject complexObject = builder.setProperty3("value3").setProperty4("value4").build();
//调用复杂对象方法
complexObject.someMethod();
}
}
0 0
- java设计模式(创建型)之生成器模式
- 设计模式之生成器(Builder)----对象创建型模式
- Java设计模式(4)创建型:生成器模式
- 设计模式-创建型模式之 Builder(生成器)
- 【设计模式】创建型模式之生成器Builder
- 设计模式之对象创建型 — builder 生成器模式
- 设计模式-创建型-生成器
- java创建型设计模式——生成器模式
- Builder生成器(创建型设计模式)面向对象设计模式纵横谈讲座笔记之四
- 设计模式-创建型模式-生成器
- 设计模式--创建型--生成器模式
- 创建型模式之建造者模式(生成器模式)
- java设计模式 之生成器模式 Builder
- java设计模式之生成器模式
- java设计模式之builder生成器模式
- java设计模式之生成器模式
- JAVA设计模式之生成器模式
- 设计模式笔记(4)---生成器模式(创建型)
- 知道创宇研发技能表v2.2
- oracle pl sql CURSOR_ALREADY_OPEN
- hibernate缓存机制
- C++中的static使用
- 通过tomcat实现多域名配置
- java设计模式(创建型)之生成器模式
- Java小游戏——捕鱼达人
- 算法导论的思维导图,采用xmind制作。
- 在本机用Toad远程连接Oracle数据库
- 驱动程序编写入门以及驱动程序加载
- Binary Tree Level Order Traversal II
- C++程序设计
- 以太网端口技术(2)
- 最大连续子序列相乘