`
linpyi
  • 浏览: 63080 次
  • 性别: 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模式demo

    Builder模式是一种创建型设计模式,它提供了一种创建对象的抽象接口,并允许子类按照步骤构建复杂的对象。这种模式将对象的创建过程分离出来,使得同样的构造过程可以创建不同的表示,从而实现对象创建过程的解耦。 ...

    c++设计模式-创建型模式-建造者模式

    **建造者模式(Builder Pattern)**是软件设计模式中的一种创建型模式,它允许我们分步骤构建复杂的对象,而无需暴露构建过程。在C++中,这种模式常用于将对象的创建过程与使用过程分离,使得对象的构建更加灵活,...

    Java设计模式-建造者模式详解

    Java设计模式-建造者模式详解将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。生成器模式(Builder)是使用多个“小型”工厂来最终创建出一个完整对象。当我们使用Builder的时候,...

    java设计模式---诙谐易懂版

    设计模式一般分为三大类:创建型模式、结构型模式和行为型模式。 3. 根据文件内容,诸葛亮给赵云的三个锦囊妙计可以用策略模式来实现。每个妙计对应一个实现了策略接口的具体策略类。例如,BackDoor类实现了...

    设计模式精解-GoF-23种设计模式解析--附C++源代码

    - 建造者模式(Builder):将复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 - 对象池模式(Pool):通过重用已创建的对象来减少对象的创建和销毁次数。 2. **结构型模式**:这类模式...

    Java 设计模式-建造者模式(Builder)Android讲解

    建造者模式(Builder)是Java设计模式中的一种创建型模式,它允许我们分步骤构建复杂的对象,而无需暴露其构造过程。在Android开发中,这种模式尤其有用,因为Android组件如Activity、Fragment等的初始化过程通常...

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

    "设计模式-建造者模式" ...建造者模式是一种非常有用的设计模式,可以解决复杂对象的创建问题,提高软件的可维护性和可重用性。但是,需要根据实际情况选择使用该模式,并且需要遵循一定的设计原则。

    设计模式之创建模式Builder

    建造者模式(Builder Pattern)是设计模式中的一种创建型模式,它允许我们分步骤构建复杂的对象,而无需暴露其构造过程。这种模式的核心思想在于将对象的构建与表示分离,使得构建过程和不同表示可以独立变化,提高...

    设计模式之建造者Builder模式

    **建造者模式(Builder Pattern)**是软件设计模式中的一种,属于创建型模式。它将复杂对象的构建过程与它的表示分离,使得同样的构建过程可以创建不同的表示。建造者模式通常用于那些需要大量构造参数的对象,通过...

    设计模式1-创建型模式

    "设计模式1-创建型模式" 设计模式是软件设计中的一种解决方案,它提供了一种通用的设计方案,解决了面相对象系统中重复出现的设计问题。设计模式的学习和运用对软件系统开发有着非常重要的意义,它可以帮助开发者更...

    JAVA设计模式-chm版

    设计模式是对常见问题的解决方案的标准化描述,它们在软件工程中起到了重要的作用,帮助开发者创建可维护、可扩展且易于理解的代码。 一、设计模式的分类: 设计模式通常分为三大类:创建型模式、结构型模式和行为...

    《设计模式--基于C#的工程化实现及扩展》.(王翔)_《0528》.rar

    创建型模式关注对象的创建过程,如单例模式(Singleton)、工厂模式(Factory)和建造者模式(Builder)等,它们提供了一种灵活的方式来创建和管理对象,避免了硬编码和紧密耦合。结构型模式关注如何将对象和类组合...

    23种设计模式的java实现-Builder

    1. Product(产品):定义了被构建对象的接口或类,Builder模式创建的产品对象。 2. Builder(抽象建造者):为创建一个Product对象的各个部分指定接口。它声明了构建产品对象的各个部件的方法,但不给出具体实现。 ...

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

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

    设计模式-建造者模式

    建造者模式(Builder Pattern)是一种创建型设计模式,它提供了一种方法来分步骤构建复杂的对象,使得构建过程和表示分离,使得同样的构建过程可以创建不同的表示。这种模式经常在对象的构造过程中需要进行多种选择...

    23种设计模式-创建型模式.docx

    ### 23种设计模式之创建型模式 #### 一、单例模式(Singleton) **定义**:确保一个类只有一个实例,并提供一个全局访问点。 **实现方式**: 1. **饿汉式**:在类装载时即创建唯一实例。 - **优点**:线程安全,...

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

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

    23种 设计模式---面向对象的基本原则

    - 构建者模式(Builder):将一个复杂对象的构建与其表示分离,使同样的构建过程可以创建不同的表示。 2. 结构型模式(Structural Patterns): - 代理模式(Proxy):为其他对象提供一种代理以控制对这个对象的...

Global site tag (gtag.js) - Google Analytics