它是一种对象构建模式,它可以将复杂对象的建造过程抽象出来(抽象类别),使这个抽象过程的不同实现方法可以构造出不同表现(属性)的对象。
(1)创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式;
(2)构造过程必须允许被构造的对象有不同的表示。
package org.fanzone.pattern.builder;
/**
* Title: base<br>
* Description: Final Product<br>
* Copyright: Copyright (c) 2011 <br>
* Create DateTime: Jul 6, 2011 8:10:55 PM <br>
* @author wangmeng
*/
public class Person {
@SuppressWarnings("unused")
private String looks;
@SuppressWarnings("unused")
private String figure;
@SuppressWarnings("unused")
private String sex;
public void setLooks(String looks){
this.looks = looks;
}
public void setFigure(String figure){
this.figure = figure;
}
public void setSex(String sex){
this.sex = sex;
}
public String getLooks(){
return this.looks;
}
public String getFigure(){
return this.figure;
}
public String getSex(){
return this.sex;
}
}
---------------------------------------------------------------------
package org.mars.pattern.builder;
/**
* Title: base<br>
* Description: Abstract Builder<br>
* Copyright: Copyright (c) 2011 <br>
* Create DateTime: Jul 6, 2011 8:28:07 PM <br>
* @author wangmeng
*/
public abstract class PersonBuilder {
protected Person person;
public Person getPerson(){
return this.person;
}
public void buildPerson(){
person = new Person();
}
public abstract void buildLooks();
public abstract void buildFigure();
public abstract void buildSex();
}
-------------------------------------------------------
package org.mars.pattern.builder;
/**
* Title: base<br>
* Description: Concrete Builder<br>
* Copyright: Copyright (c) 2011 <br>
* Create DateTime: Jul 6, 2011 8:43:04 PM <br>
* @author wangmeng
*/
public class FrogPrinceBuilder extends PersonBuilder{
@Override
public void buildFigure() {
this.person.setFigure("strong");
}
@Override
public void buildLooks() {
this.person.setLooks("handsome");
}
@Override
public void buildSex() {
this.person.setSex("male");
}
}
------------------------------------------------------
package org.mars.pattern.builder;
/**
* Title: base<br>
* Description: Concrete Builder<br>
* Copyright: Copyright (c) 2011 <br>
* Create DateTime: Jul 6, 2011 8:42:04 PM <br>
* @author wangmeng
*/
public class SnowWhiteBuilder extends PersonBuilder{
@Override
public void buildFigure() {
this.person.setFigure("slim");
}
@Override
public void buildLooks() {
this.person.setLooks("pretty");
}
@Override
public void buildSex() {
this.person.setSex("female");
}
}
---------------------------------------------------------
package org.mars.pattern.builder;
/**
* Title: base<br>
* Description: Director<br>
* Copyright: Copyright (c) 2011 <br>
* Create DateTime: Jul 6, 2011 8:54:02 PM <br>
* @author wangmeng
*/
public class NuWa {
private PersonBuilder personBuilder;
public void setPersonBuilder(PersonBuilder personBuilder){
this.personBuilder = personBuilder;
}
public Person getPerson(){
return personBuilder.getPerson();
}
public void constructPerson(){
personBuilder.buildPerson();
personBuilder.buildLooks();
personBuilder.buildFigure();
personBuilder.buildSex();
}
}
---------------------------------------------------------
package org.mars.pattern.builder;
/**
* Title: base<br>
* Description: Just for a test.<br>
* Copyright: Copyright (c) 2011 <br>
* Create DateTime: Jul 6, 2011 8:58:53 PM <br>
* @author wangmeng
*/
public class Commission {
public static void main(String[] args){
NuWa nuWa = new NuWa();
FrogPrinceBuilder frogPrinceBuilder = new FrogPrinceBuilder();
SnowWhiteBuilder snowWhiteBuilder = new SnowWhiteBuilder();
/**
* Build the specified product.
*/
nuWa.setPersonBuilder(frogPrinceBuilder);
nuWa.constructPerson();
Person person = nuWa.getPerson();
System.out.println("Frog Prince: I am a " + person.getSex() + " who looks " + person.getLooks() + " and " + person.getFigure() + ".");
nuWa.setPersonBuilder(snowWhiteBuilder);
nuWa.constructPerson();
person = nuWa.getPerson();
System.out.println("Snow White: I am a " + person.getSex() + " who looks " + person.getLooks() + " and " + person.getFigure() + ".");
}
}
分享到:
相关推荐
23种设计模式之生成器模式对生成器模式进行了简单的介绍,并附带了例子程序,和大家分享
使用生成器模式模拟实现IBM电脑的生产,其中IBM电脑的主要结构用如下表示: class IBM{ string monitor=”IBM的显示器”; string keyboard=”IBM的键盘”; string mouse=”IBM的鼠标”; Motherboard* MB; ...
生成器模式代码示例,使用JAVA代码演示。配有说明文档,有助于对生成器模式的理解。
java设计模式之生成器模式,希望对大家有所帮助。
在《Head First Design Patterns》文中是这么介绍生成器模式的,“封装一个产品的构造过程,并允许按步骤构造”,感觉说得不是很清楚。而在网上查找相关资料是这么解释的,建造者模式(Builder Pattern)使用多个简单...
C#面向对象设计模式纵横谈(4):Builder 生成器模式(创建型模式) 体验课程
生成器模式源代码 博客中设计模式文章代码
JavaScript设计模式之构造器模式(生成器模式)定义与用法实例分析.docx
1.生成器模式可以理解为零部件组装工厂,与工厂方法是非常相似的! 2.(心得:)指导者指导生成器去生成各个实例
2021年全面详解设计模式中的生成器模式,图文并茂,面试必备技能!
3 生成器模式.txt
C#面向对象设计模式纵横谈(4):Builder 生成器模式(创建型模式) (Level 300)
在这里与各位分享本人从网络上下载的C#面向对象设计模式纵横谈系列视频,共有25节,除了第一节需要各位贡献一点资源分以作为对本人上传资源的回馈,后面的其他资源均不需要... 这是第4节:创建型模式Builder生成器模式
NULL 博文链接:https://hnzhoujunmei.iteye.com/blog/1033310
C#视频-面向对象设计模式纵横谈(4):Builder 生成器模式(创建型模式)
【设计模式】- 生成器模式(Builder)(csdn)————程序
主要介绍了JavaScript设计模式之构造器模式(生成器模式)定义与用法,结合实例形式分析了javascript构造器模式的概念、原理、与工厂模式的区别以及相关使用方法,需要的朋友可以参考下
iOS生成器设计模式代码 欢迎下载交流学习
主要为大家详细介绍了23种设计模式之java生成器模式,具有一定的参考价值,感兴趣的小伙伴们可以参考一下