`
wsql
  • 浏览: 11773914 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

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

 
阅读更多

创建者模式主要是为了所谓的高聚合,解耦合,遇到多种配件于一身的情况的时候,放在实体类里面不合适,放在工厂类也不合适,所以就添加了一个创建者类,专门对相应的零件进行组装,如同汽车了N中配件,同时要是各种配件互相联系的话也在这个Builder里面一并做了。

明天准备去爬山,这个原理图就再补上吧:

今天把uml补上了,不过对于uml初学的我就乱乱的先随便画一个吧,等以后慢慢入门了在斟酌里面的错误和细节:


下面是我自己攒出来的例子(回来的时候着急,把书忘教室了,不知道书上怎么写的,不过明显记得一处错误,构造器也加上了一个void),为了在Builder里面优化一下,用了一下反射,这样就可以直接通过多态来实现对于派生类中的实体类进行初始化并且操作了,简单的实现电脑的组装:通过工厂类实例化Computer的父类指向子类的实例,然后在Builder里面添加一个工厂类的私有变量,通过构造器把要穿件的Computer实例传入Builder,然后对其进行解析,反射得到路径,对其派生类里面的方法进行反射得到相应的配件的集成,转配完成。少说多做:

package com.designpattern.builder;

public interface Mouse {
	public void add();
}

package com.designpattern.builder;

public interface Monitor {
	public void add();
}

package com.designpattern.builder;

public interface Keyboard {
	public void add();
}

package com.designpattern.builder;

public interface Displayer {
	public void add();
}

package com.designpattern.builder;

public interface Factory {
	public Computer buildComputer();
}

package com.designpattern.builder;

public interface Computer {
	public void add();
}

package com.designpattern.builder;

public class AcerMouse implements Mouse {

	@Override
	public void add() {
		System.out.println("add AcerMouse");
	}

}

package com.designpattern.builder;

public class AcerMonitor implements Monitor {

	@Override
	public void add() {
		System.out.println("add AcerMonitor");
	}

}

package com.designpattern.builder;

public class AcerKeyboard implements Keyboard {

	@Override
	public void add() {
		System.out.println("add AcerKeyboard");
	}

}

package com.designpattern.builder;

public class AcerDisplayer implements Displayer {

	@Override
	public void add() {
		System.out.println("add AcerDisplayer");
	}

}

package com.designpattern.builder;

public class AcerFactory implements Factory {
	
	@Override
	public Computer buildComputer() {
		return new Acer();
	}
}

package com.designpattern.builder;

public class Acer implements Computer {

	@Override
	public void add() {
		System.out.println("builder Acer");
	}

}

package com.designpattern.builder;

import java.lang.reflect.Method;

public class Builder {
	private Factory factory;

	public Builder(Factory factory) {
		this.factory = factory;
	}

	public void builder() throws Exception {
		factory.buildComputer().add();
		String computer = factory.getClass().toString();
		computer = computer.substring(6, computer.length() - 7);

		// build Mouse
		Class c = Class.forName(computer + "Mouse");
		Mouse mouse = (Mouse) c.newInstance();
		Method method = c.getMethod("add", null);
		method.invoke(mouse, null);

		// build Keyboard
		c = Class.forName(computer + "Keyboard");
		Keyboard keyboard = (Keyboard) c.newInstance();
		method = c.getMethod("add", null);
		method.invoke(keyboard, null);

		// build Displayer
		c = Class.forName(computer + "Displayer");
		Displayer displayer = (Displayer) c.newInstance();
		method = c.getMethod("add", null);
		method.invoke(displayer, null);

		// build Monitor
		c = Class.forName(computer + "Monitor");
		Monitor monitor = (Monitor) c.newInstance();
		method = c.getMethod("add", null);
		method.invoke(monitor, null);

		System.out.println("build complete");
	}
}

package com.designpattern.builder;

public class Client {
	public static void main(String[] args) {
		try {
			new Builder(new AcerFactory()).builder();
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}


分享到:
评论

相关推荐

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

    本人理解的builder模式

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

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

    设计模式之创建模式Builder

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

    JAVA设计模式chm文档

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

    设计模式文档 chm

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

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

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

    33种JAVA设计模式DEMO

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

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

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

    用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) ...

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

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

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

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

    设计模式PPT

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

    设计模式--C++

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

    [创建型模式]设计模式之建造者模式(Builder Pattern)

    NULL 博文链接:https://jacky-dai.iteye.com/blog/2295399

    设计模式 GOF 23

    本书设计实例从面向对象的设计中精选出23个设计模式,总结了面向对象设计中最有价值的经验,并且用简洁可复用的形式表达出来。本书分类描述了一组设计良好,表达清楚的软件设计模式,这些模式在实用环境下有特别有用...

    32种设计模式

    C# 32种设计模式: 创建型: 1. 单件模式(Singleton Pattern) 2. 抽象工厂(Abstract Factory) 3. 建造者模式(Builder) 4. 工厂方法模式(Factory Method) 5. 原型模式(Prototype) ...

    java设计模式【之】建造者模式【源码】【场景:车辆组装】

    java设计模式【之】建造者模式【源码】【场景:车辆组装】 将复杂的对象构建,与对象的使用进行分离 用户只需要通过简单流程即可创建出对象 方法调用顺序,步骤的不同实现 优点:封装性号,创建和使用分离,扩展性...

    设计模式(.PDF)

    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 指定对象...

    GOLF设计模式(C++语言版)

    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 ...

Global site tag (gtag.js) - Google Analytics