设计模式之建造者模式(代码片段)

独孤九戒 独孤九戒     2022-12-12     725

关键词:

设计模式之建造者模式

    建造者模式(Builder Pattern)也叫生成器模式,定义:Separate the construction of complex object from its representation so that the same construction process can create different representations.(将一个复杂的对象的构建与它的表示分离,使得同样的构造过程可以创建不同的表示)

通用类图


4个角色

1.Product产品类:通常是实现了模板方法模式,也就是有模板方法和基本方法;

2.Builder抽象建造者类:规范产品的组件,一般是由子类实现;

3.ConcreteBuilder具体建造者类:实现抽象类定义的所有方法,并且返回一个组建好的对象;

4.Director导演类:负责安排已有模块的顺序,然后告诉Build开始建造。

产品类

public class Product 
	public void doSomething()
		
	
抽象建造者类

public abstract class Builder 
	//设置产品的不同部分,以获得不同的产品
	public abstract void setPart();
	//建造产品
	public abstract Product buildProduct();
具体建造者类

public class ConcreteProduct extends Builder
	private Product product=new Product();
	//设置产品零件
	public void setPart()
		
	
	//组建一个产品
	public Product buildProduct()
		return product;
	

导演类

public class Director 
	private Builder builder=new ConcreteProduct();
	//构建不同的产品
	public Product getAProduct()
		builder.setPart();
		return builder.buildProduct();
	

建造者模式优点:

1.封装性,使用建造者模式,可以使得客户端不必知道产品内部组成细节;

2.建造者独立,容易扩展;

3.便于控制细节风险,由于具体的建造者是独立的,因此可以对建造过程逐步细化,而不对其他的模块产生任何影响。

建造者模式使用场景

1.相同的方法,不同的执行顺序,产生不同的事件结果;

2.多个部件或零件,都可以装配到一个对象中,但是产生的运行结果又不相同;

3.产品类非常复杂,或者产品类中的调用顺序不同产生了不同的功效;

4.对象创建过程中会使用到系统中的一些其他对象,这些对象在产品对象的创建过程中不易得到时;

注意事项

建造者模式关注的是零件类型和装配工艺(顺序),这是它与工厂方法模式最大的不同。

例子:不同汽车可以随意设置不同启停模式

汽车抽象类

public abstract class CarModel 
	//各方法顺序
	private ArrayList<String> sequence=new ArrayList<String>();
	
	protected abstract void start();
	protected abstract void stop();
	protected abstract void alarm();
	protected abstract void engineBoom();
	
	final public void run()
	
		for(int i=0;i<this.sequence.size();++i)
			String actionName=this.sequence.get(i);
			if(actionName.equalsIgnoreCase("start"))
				this.start();
			else if(actionName.equalsIgnoreCase("stop"))
				this.stop();
			else if(actionName.equalsIgnoreCase("alarm"))
				this.alarm();
			else if(actionName.equalsIgnoreCase("engine boom"))
			
				this.engineBoom();
			
		
	
	
	final public void setSequence(ArrayList<String> sequence)
		this.sequence=sequence;
		
奔驰模型

public class BenzModel extends CarModel
	protected void start()
		System.out.println("启动");
	
	protected void stop()
		System.out.println("停止");
	
	protected void alarm()
		System.out.println("报警");
	
	protected void engineBoom()
		System.out.println("发动机");
	
宝马模型

public class BWMModel extends CarModel
	protected void start()
		System.out.println("启动");
	
	protected void stop()
		System.out.println("停止");
	
	protected void alarm()
		System.out.println("报警");
	
	protected void engineBoom()
		System.out.println("发动机");
	
抽象组装类

public abstract class CarBuilder 
	//给定顺序
	public abstract void setSequence(ArrayList<String>sequence);
	//返回模型
	public abstract CarModel getCarModel();
奔驰组装类

public class BenzBuilder extends CarBuilder
	private BenzModel benz=new BenzModel();
	public CarModel getCarModel()
		return this.benz;
	
	public void setSequence(ArrayList<String> sequence)
		this.benz.setSequence(sequence);
	
宝马组装类

public class BWMBuilder extends CarBuilder
	private BWMModel bwm=new BWMModel();
	public CarModel getCarModel()
		return this.bwm;
	
	public void setSequence(ArrayList<String> sequence)
		this.bwm.setSequence(sequence);
	
导演类

public class Director 
	private ArrayList<String> sequence=new ArrayList();
	private BenzBuilder benzbuilder=new BenzBuilder();
	private BWMBuilder bwmbuilder=new BWMBuilder();
	
	public BenzModel getABenzModel()
		this.sequence.clear();
		this.sequence.add("start");
		this.sequence.add("stop");
		this.benzbuilder.setSequence(sequence);
		return (BenzModel)this.benzbuilder.getCarModel();
	
	
	public BenzModel getBBenzModel()
		this.sequence.clear();
		this.sequence.add("engine boom");
		this.sequence.add("start");
		this.sequence.add("stop");
		this.benzbuilder.setSequence(sequence);
		return (BenzModel)this.benzbuilder.getCarModel();
	
	
	public BWMModel getCBWMModel()
		this.sequence.clear();
		this.sequence.add("alarm");
		this.sequence.add("start");
		this.sequence.add("stop");
		this.bwmbuilder.setSequence(sequence);
		return (BWMModel)this.bwmbuilder.getCarModel();
	
	
	public BWMModel getDBWMModel()
		this.sequence.clear();
		this.sequence.add("start");
		this.bwmbuilder.setSequence(sequence);
		return (BWMModel)this.bwmbuilder.getCarModel();
	

场景类

public class Client 

	public static void main(String[] args) 
		// TODO Auto-generated method stub
		Director director=new Director();
		for(int i=0;i<10;++i)
			director.getABenzModel().run();
		
		for(int i=0;i<10;++i)
			director.getBBenzModel().run();
		
		for(int i=0;i<10;++i)
			director.getCBWMModel().run();
		
		for(int i=0;i<10;++i)
			director.getDBWMModel().run();
		
	














设计模式之:建造者模式builderpattern的实现(代码片段)

建造者模式相较于工厂模式,用于创建复杂的对象;使用的技术:继承、抽象类、多态、配置文件、反射;建造者模式的设计原则:面向抽象类编程,符合依赖倒置原则;通过配置文件生成具体建造者,替代抽象建造者,符合里... 查看详情

设计模式之建造者模式(代码片段)

本文由老王家组装电脑引出——建造者设计模式,详细介绍建造者模式的基本概念和实现代码,为了便于理解建造者模式,我们会对实际应用中的典型案例进行介绍。最后对比工厂模式和建造者模式之间的区别,让我们在实际使... 查看详情

设计模式之建造者模式(代码片段)

建造者模式1.简要概述2.模式结构3.实现代码4.优点好处5.缺点弊端6.应用场景7.应用示例1.简要概述建造者模式也可以叫做生成器模式。建造者模式就是说首先封装一个对象的构造过程,然后按照这个过程步骤去构建这个对象实... 查看详情

设计模式之建造者模式(代码片段)

设计模式之建造者模式(三)  今天来学习建造者模式,好像也有人叫生成器,一个意思.  一 概念  建造者模式:使用多个简单的对象一步一步构建成一个复杂的对象。这种类型的设计模式属于创建型模式,它提供了一种创... 查看详情

设计模式之建造者模式(代码片段)

设计模式之建造者模式importrandomfromabcimportABCMeta,abstractmethodclassCellPhone:#产品端def__init__(self,screen=None,cpu=None,camera=None,cell=None,name=None):#手机的四个属性:屏幕、处理器、摄像头、电池self.screen=Noneself.cpu=Nonese 查看详情

设计模式从青铜到王者第八篇:创建型模式之建造者模式(builderpattern)(代码片段)

系列文章目录文章目录系列文章目录前言建一栋房子总共分几步?建造者模式告诉你答案!1.建造者模式简介2.建造者模式结构3.建造者模式代码实例3.1.定义产品类House3.2.定义建造者3.2.1.定义抽象建造者AbstractBuilder3.2.2.定... 查看详情

23种设计模式之建造者模式(代码片段)

1/**2*作用:3*将复杂物体的构建与表现相分离。4*組成角色:5*1)建造者(Builder):負責定義用來生成實例的接口(API)6*2)具体的建造者(ConcreateBuilder):负责实现Builder角色定义的接口实现类。7*针对不同的业务逻辑,具体化复杂对象的各... 查看详情

设计模式之建造者模式(代码片段)

 建造者模式:是将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 组成: 1、builder:给出一个抽象接口,以规范产品对象的各个组成成分的建造。这个接口规定要实现复杂对象的... 查看详情

springmvc之requestmappinginfo类建造者模式使用(代码片段)

...o类是存储request与handler对应关系详情的类。该类是典型的建造者模式,下面我们通过源码分析该类为何使用以及如何使用的建造者模式。为何使用建造者模式我们看RequestMappingInfo的成员属性有哪些:privatefinalStringname; privatefinal... 查看详情

java设计模式之建造者模式(代码片段)

转自 JAVA设计模式之建造者模式建造者模式(Builder)的定义将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。Builder模式是一步一步创建一个复杂对象的创建型模式,它允许使用... 查看详情

再战设计模式之建造者模式(代码片段)

建造者模式 他的本质主要是:分离了组件的构造(由builder来负责),和装配(由Director负责),从而构造出复杂的对象,这个模式使用于:某个对象构建过程复杂的情况下使用建造模式可以将一个产品的内部表象(internalrepresentation)与... 查看详情

设计模式之建造者模式——builder(代码片段)

...建造者模式,又名生成器模式、构建者模式等,是创建型设计模式之一。用于将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。1.适用性:对象的创建比较复杂、有多种创建形式时创建复杂对象... 查看详情

java设计模式之建造者模式(代码片段)

...得同样的构建过程可以创建不同的表示,属于创建型设计模式对于用户而言,使用建造者模式只需指定需要创建的类型就可以获得对象,创建过程及细节不需要了解。根据建造者模式的定义,可以简单的理解为两... 查看详情

java设计模式之建造者模式(代码片段)

...得同样的构建过程可以创建不同的表示,属于创建型设计模式对于用户而言,使用建造者模式只需指定需要创建的类型就可以获得对象,创建过程及细节不需要了解。根据建造者模式的定义,可以简单的理解为两... 查看详情

gof23设计模式之建造者模式(代码片段)

目录使用场景建造者模式的本质代码示例代码调用使用场景–我们要建造一个复杂的产品。比如:神州飞船,Iphone。这个复杂的产品的创建。有这样一个问题需要处理:•装配这些子组件是不是有个步骤问题?–实际开发中... 查看详情

java设计模式之创建型:建造者模式(代码片段)

一、什么是建造者模式:        建造者模式将复杂产品的创建步骤分解在在不同的方法中,使得创建过程更加清晰,从而更精确控制复杂对象的产生过程;通过隔离复杂对象的构建与使用,也就是将产品... 查看详情

设计模式之建造者模式(代码片段)

前言建造者模式也是常用的设计模式,Lombok的@Builder就是一个典型的应用。googleguavacache创建cache就只能通过builder方式建造者模式建造者模式有四个角色:1product2抽象builder3实现builder4director建造者模式是的创建对象算法独立,调用... 查看详情

创建型模式之建造者模式实例及代码操作(代码片段)

...眼睛、耳朵。嘴等表现出不同的形状。传统解决方法缺陷建造者模式概念模式结构建造者模式包括4个角色:(1)产品类(Prod 查看详情