`
linpyi
  • 浏览: 62159 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

设计模式-创建者模式(Builder)

阅读更多

最近看了一些设计模式,感觉短短的代码,能抽象出很多东西,

 

原来写代码的时候每整体的考虑,也许只有写了一段时间的代码,才会对设计模式有比较深的体会

 

builder创建者,从名字上理解,他主要承担的是构件对象的操作

 

书上定义

 

builder:将一个复杂对象的构造与它的表示分离,使得同样的构件过程可以创建不同的表示

 

builder模式是一步一步创建一个复杂的对象,它允许用户可以只通过指定复杂对象的类型和内容就可以构建它们.用户不知

 

道内部的具体构建细节.有点类似工厂方法模式和抽象工厂模式,

 

从概念上,大家理解都差不多,大概的意思就是简化代码,只要写几行代码就可以创建一个你需要的对象,而且可以从用.从用还

 

比较简单.

 

贴代码吧

 

我这里创建了一个电脑builder

 

Computer.java这里实现了一台电脑需要的配件

 

package com.linpyi.mode;

public class Computer {

	private String CPU;
	private String disk;//硬盘
	private String memory;//内存
	private String mainboard;//主板

	public String getCPU() {
		return CPU;
	}

	public void setCPU(String cpu) {
		CPU = cpu;
	}

	public String getDisk() {
		return disk;
	}

	public void setDisk(String disk) {
		this.disk = disk;
	}

	public String getMemory() {
		return memory;
	}

	public void setMemory(String memory) {
		this.memory = memory;
	}

	public String getMainboard() {
		return mainboard;
	}

	public void setMainboard(String mainboard) {
		this.mainboard = mainboard;
	}
}

 

ComputerBuilder.java 抽象电脑组装类,每个不同产品的电脑都继承这个类,里面实现组装电脑的基本方法

 

package com.linpyi.mode;

/**
 * 建造电脑组装类
 * 
 * @author work
 * 
 */
public abstract class ComputerBuilder {

	public abstract void makeCPU();

	public abstract void makeDisk();

	public abstract void makeMemory();

	public abstract void makeMainboard();
	
	public abstract Computer getComputer();
}

 

LenvoBuilder.java  联想电脑组装类,

 

package com.linpyi.mode;

public class LenvoBuilder extends ComputerBuilder{

	Computer computer = new Computer();
	@Override
	public Computer getComputer() {
		// TODO Auto-generated method stub
		return computer;
	}

	@Override
	public void makeCPU() {
		computer.setCPU("Lenvo-AMD");
	}

	@Override
	public void makeDisk() {
		// TODO Auto-generated method stub
		computer.setDisk("Lenvo-seagate");
	}

	@Override
	public void makeMainboard() {
		// TODO Auto-generated method stub
		computer.setMainboard("Lenvo-ausu");
	}

	@Override
	public void makeMemory() {
		// TODO Auto-generated method stub
		computer.setMemory("Lenvo-kingston");
	}

}

 

ComputerDirector.java 组装类(DIR)自己组装电脑拉

 

package com.linpyi.mode;

/**
 * 电脑组装类
 * @author work
 *
 */
public class ComputerDirector {

	public void makeComputer(ComputerBuilder builder){
		builder.makeCPU();
		builder.makeDisk();
		builder.makeMainboard();
		builder.makeMemory();
	}
}

 

Client.java 客户操作类

 

package com.linpyi.mode;

/**
 * 操作类
 * @author work
 *
 */
public class Client {

	public static void main(String[] args){
		//实例化一个创建者
		ComputerDirector director = new ComputerDirector();
		//实例化一个lenvo的类
		ComputerBuilder builder = new LenvoBuilder();
		//创建产品,用户不需要知道创建里面的方法
		director.makeComputer(builder);
		//获得产品
		Computer computer = builder.getComputer();
		System.out.println(computer.getCPU());
		System.out.println(computer.getDisk());
		System.out.println(computer.getMainboard());
		System.out.println(computer.getMemory());
	}
}

 

运行结果

Lenvo-AMD
Lenvo-seagate
Lenvo-ausu
Lenvo-kingston

 

 

以后如果需要增加电脑生产品牌,只要创建一个builder 例如 HPBuilder.java

 

貌似一看起来和工厂模式很像很像,我也对比了下,确实有点像

 

总感觉他和抽象工厂模式还是有一定差别,比如在创建对象上,但是又写不出来,也许我对这2种模式的理解还不够深刻,代码写

 

的不够多

3
0
分享到:
评论
4 楼 风漂雨落 2011-11-18  
我怎么觉得你这个例子不像是Builder模式,更像抽象工厂呢,Builder更注重于创建复杂的对象(创建过程复杂)或者当创建的对象有多种不同的表示时的情况....
3 楼 johnhan 2008-08-21  
我认为这是继承的好处,子类可以继承超类的所有非私有属性和方法
2 楼 linpyi 2008-08-19  
回复:congjl2002
接口在某种程度上和interface是差不多,在这也许你用接口也可以得到同样的答案,
但是得到答案并不是我们的目的,接口和抽象类的不同你可以参看我转载的http://linpyi.iteye.com/blog/223871,

LenvoBuilder 和ComputerBuilder要使用继承,因为,LenvoBuilder和ComputerBuilter 是is a的关系,即父类和派生类本质上是相同的,如果使用interface,仅仅是一种形式而且,你可以丢LenvoBuilder在其他功能上使用接口,但是和ComputerBuilder使用抽象类会比较合适点
1 楼 congjl2002 2008-08-19  
确实很难说,不过你这个类ComputerBuilder 为什么不定义为Interface呢

相关推荐

    设计模式 创建型模式 Builder模式(建造者)

    统设计中,有时候面临着一个“复杂系统”的创建工作,该对象通常由各个部分的子对象用一定的算法构成,或者说按一定的步骤组合而成;这些的算法和步骤是稳定的,而构成这个对象的子对象却经常由于需求改变而发生...

    设计模式之创建模式Builder

    将一个复杂对象的构造与它的表示分离,使同样的构建 过程可以创建不同的表示,这样的设计模式被称为建造者模式。

    设计模式-------建造模式

    设计模式之---建造模式 1,建造模式属于对象的...抽象建造者builder接口,实现生产产品操作--创建完成 提供产品实例; ,导演者(director):调用具体建造者角色以创建产品对象; ,产品(Product):建造中的复杂对象,

    设计模式--C++

    3.2 Builder(生成器)—对象创建型模式 633.3 Factory Method(工厂方法)—对象创建型模式 70 3.4 Prototype(原型)—对象创建型模式 87 3.5 Singleton(单件)—对象创建型模式 84 3.6 创建型模式的讨论 89 第 4...

    JAVA设计模式-day2.pdf

    JAVA设计模式-day2,请的行业大能讲得课程,涉及:创建模式(5种: 1、 工厂方法模式(Factory Method); 2、 抽象工厂模式; 3、 单例模式(Singleton) • 4、 建造者模式(Builder); 5、 原型模式(Prototype...

    设计模式--可复用面向对象软件的基础

    1.2 Smalltalk MVC中的设计模式 1.3 描述设计模式 1.4 设计模式的编目 1.5 组织编目 1.6 设计模式怎样解决设计问题 1.7 怎样选择设计模式 1.8 怎样使用设计模式 第二章 实例研究:设计一个文档编辑器 2.1 设计问题...

    JAVA设计模式chm文档

    设计模式之Builder 设计模式之Singleton(单态) 结构模式: 设计模式之Facade(外观) 设计模式之Proxy(代理) 设计模式之Adapter(适配器) 设计模式之Composite(组合) 设计模式之Decorator(油漆工) 设计模式之Bridge 设计...

    23种设计模式 - 各种模式的学习

    23种设计模式 目录 创建型 1. Factory Method(工厂方法) 2. Abstract Factory(抽象工厂) 3. Builder(建造者) 4. Prototype(原型) 5. Singleton(单例) 结构型 6. Adapter Class/Object(适配器) ...

    设计模式文档 chm

    设计模式之Builder 设计模式之Singleton(单态) 结构模式: 设计模式之Facade(外观) 设计模式之Proxy(代理) 设计模式之Adapter(适配器) 设计模式之Composite(组合) 设计模式之Decorator(油漆工) 设计模式之Bridge 设计...

    C#面向对象设计模式纵横谈(视频与源码)

    C#面向对象设计模式纵横谈(4):Builder 生成器模式(创建型模式) C#面向对象设计模式纵横谈(5):Factory Method 工厂方法模式(创建型模式) C#面向对象设计模式纵横谈(6):Prototype 原型模式(创建型模式) C#面向...

    设计模式:可复用面向对象软件的基础--详细书签版

    整个设计模式领域还很新,本书的四位作者也许已占据了这个领域造诣最深的专家中的半数,因而他们定义模式的方法可以作为后来者的榜样。如果要知道怎样恰当定义和描述设计模式,我们应该可以从他们那儿获得启发”--steve...

    设计模式可复用面向对象软件的基础.zip

    书名: 设计模式可复用面向对象软件的基础 英文原书名: Design Patterns:Elements of Reusable Object-Oriented software 作者: Erich Gamma 等 译者: 李英军 马晓星 蔡敏 刘建中 书号: 7-111-07575-7 页码: 254 定价...

    33种JAVA设计模式DEMO

    这些设计模式提供了一种在创建对象的同时隐藏创建逻辑的方式,而不是使用 new 运算符直接实例化对象。这使得程序在判断针对某个给定实例需要创建哪些对象时更加灵活。 工厂模式(Factory Pattern) 抽象工厂模式...

    用Java实现23种设计模式

    用Java实现23种设计模式 1. 创建型模式 工厂模式(Factory Pattern) 抽象工厂模式(Abstract Factory Pattern) 单例模式(Singleton Pattern) 建造者模式(Builder Pattern) 原型模式(Prototype Pattern)...

    C++设计模式(Design Pattern)范例源代码

    23种设计模式(Design Pattern)的C++实现范例,包括下面列出的各种模式,代码包含较详细注释。另外附上“设计模式迷你手册.chm” 供参考。 注:项目在 VS2008 下使用。 创建型: 抽象工厂模式(Abstract Factory) ...

    C#设计模式_设计模式_C#_

    建造者模式(Builder) 4. 工厂方法模式(Factory Method) 5. 原型模式(Prototype)结构型: 6. 适配器模式(Adapter Pattern) 7. 桥接模式(Bridge Pattern) 8. 装饰模式(Decorator Pattern) 9. 组合模式(Composite ...

    《设计模式》中文版(23个设计模式的介绍与运用)

    1.1 什么是设计模式 2 1.2 Smalltalk MVC中的设计模式 3 1.3 描述设计模式 4 1.4 设计模式的编目 5 1.5 组织编目 7 1.6 设计模式怎样解决设计问题 8 1.6.1 寻找合适的对象 8 1.6.2 决定对象的粒度 9 1.6.3 指定对象...

    设计模式PPT

    创建型模式用来处理对象的创建过程,主要包含以下5种设计模式:  工厂方法模式(Factory Method Pattern)  抽象工厂模式(Abstract Factory Pattern)  建造者模式(Builder Pattern)  原型模式...

    单例模式源码java-DesignPattern:在个人自学阶段的23种设计模式代码的全部实现,全部使用Java编写,其中还包括各个设计模式在

    在个人自学阶段的23种设计模式代码的全部实现,全部使用Java编写,其中还包括各个设计模式在源码中的使用,每种设计模式都举了一个简单的小例子来进行实现,并加以注释 包名解释 一、DesignPattern 1.1 创建型模式 ...

Global site tag (gtag.js) - Google Analytics