菜鸟学设计模式系列笔记之建造者模式(Builder模式)

提供一种“封装机制”来隔离出“复杂对象的各个部分”的变化。

从而保持系统中的“稳定构建算法”不随需求变化而变化。————建造者模式

建造模式是对象的创建模式

建造模式可以将一个产品的内部表象与产品的生成过程分割开来,

从而可以是一个建造过程生成具有不同的内部表象的产品对象。

Intent :

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

Motivation:

在复杂对象的构造过程中,允许同样的构造过程能够加入新的被构造元素,结构化构造过程

建造模式利用一个导演者对象和具体建造者对象一个一个地建造出所有的零件,从而建造出完整的对象。

建造者模式将产品的结构和产品的零件建造过程对客户端隐藏起来,把对建造过程进行指挥的责任和具体建造者零件的责任分割开来,达到责任划分和封装的目的。

Builder :为创建一个Product对象的各个部件指定抽象接口

ConcreteBulider :

实现Builder的接口以构造和装配该产品的各个部件;

定义并申明他所创建的表示;

提供一个检索产品的接口

Director:

够做一个使用Builder接口的对象

Product

表示被构造的复杂对象;包含定义组成部件的类,包括这些部件装配成最终产品的接口

在联机射击游戏中每一个游戏人物角色都需要提供一个完整

的角色造型,包括人物造型、服装、武器等,如何创建一个

完整的游戏角色?

public class Clothing {

	public Clothing() {
		super();
		// TODO Auto-generated constructor stub
		System.out.println("Clothing new");
	}

}
public class Character {

	public Character() {
		super();
		// TODO Auto-generated constructor stub
		System.out.println("Character new");
	}

}
public class Weapon {

	public Weapon() {
		super();
		// TODO Auto-generated constructor stub
		System.out.println("weapon new");
	}

}
public class Role {
	private Clothing clothing;
	private Character character;
	private Weapon weapon;

	public Role() {
		System.out.println("Role() new");
	}

	public Role(Clothing clothing, Character character, Weapon weapon) {
		super();
		System.out.println("role(ccp) new");
		this.clothing = clothing;
		this.character = character;
		this.weapon = weapon;
	}

	public Clothing getClothing() {
		return clothing;
	}
	public void setClothing(Clothing clothing) {
		this.clothing = clothing;
	}
	public Character getCharacter() {
		return character;
	}
	public void setCharacter(Character character) {
		this.character = character;
	}
	public Weapon getWeapon() {
		return weapon;
	}
	public void setWeapon(Weapon weapon) {
		this.weapon = weapon;
	}

}
public interface RoleBuilder {
	public void buildClothing();
	public void buildCharacter();
	public void buildWeapon();
	public Role getRole();
}
public class ConcreteRoleBuilder implements RoleBuilder {
	protected Role role=new Role();
	@Override
	public void buildClothing() {
		// TODO Auto-generated method stub
		role.setClothing(new Clothing());
	}
	@Override
	public void buildCharacter() {
		// TODO Auto-generated method stub
		role.setCharacter(new Character());
	}
	@Override
	public void buildWeapon() {
		// TODO Auto-generated method stub
		role.setWeapon(new Weapon());
	}

	@Override
	public Role getRole() {
		// TODO Auto-generated method stub
		return role;
	}

}
public class Director {
	private RoleBuilder roleBuilder;

	public Director(RoleBuilder roleBuilder) {
		super();
		System.out.println("director new");
		this.roleBuilder = roleBuilder;
	}

	public void setBulider(RoleBuilder roleBuilder){
		this.roleBuilder=roleBuilder;
	}

	public Role construct() {
		roleBuilder.buildCharacter();
		roleBuilder.buildClothing();
		roleBuilder.buildWeapon();
		return roleBuilder.getRole();
	}
}
public class Client {
	public static final void main(String[] args){
		RoleBuilder builder =new ConcreteRoleBuilder();
		Director director=new Director(builder);
		Role role =director.construct();
	}
}

建造者模式特点:

1、建造者模式的“加工工艺”是暴露的。这样使得建造者模式更加灵活。

2、解耦了组装过程和创建具体部件,使得我们不用去关心每个部件是如何组装的。

实现要点:

1、建造者模式主要用于“分步骤构建一个复杂的对象”,在这其中“分步骤”是一个稳定算法,而复杂对象的各个部分则经常变化。

2、产品不需要抽象类,不大可能提炼出一个抽象的产品类。

3、创建者中的创建子部件的接口方法不是抽象方法而是空方法,不进行任何操作,

具体的创建者只需要覆盖的方法就可以,但是这也不是绝对的,特鄙视的类似文本转换这种情况下,缺省的方法将输入原封不动的输出是合理的缺省操作。

4、抽象工厂模式解决“系列对象”的需求变化,Builder模式解决“对象部分”的需求变化,

建造者模式常和组合模式结合使用。

建造者模式应用场景:

(1)需要生成一个产品对象有复杂的内部结构。每一个内部成分本身可以是对象,也可以使一个对象的一个组成部分。

(2)需要生成的产品对象的属性相互依赖。建造模式可以强制实行一种分步骤进行的建造过程。

(3)在对象创建过程中会使用到系统中的其他一些对象,这些对象在产品对象的创建过程中不易得到

时间: 2024-08-03 13:40:52

菜鸟学设计模式系列笔记之建造者模式(Builder模式)的相关文章

菜鸟学设计模式系列笔记之适配器模式(adapter模式)

一.结构模式简介: 在面向对象软件系统中,每个类都承担了一定的职责,它们可以相互协作,实现一些复杂的功能 结构型模式关注的是如何将现有类或对象组织在一起形成更加强大的结构 不同的结构型模式从不同的角度来组合类和对象 1.结构模式描述如何将类或者对象结合在一起形成更大的结构 (1)类的结构模式:类的结构模式使用继承把类.接口等组合在一起,以形成更大的结构.当一个类从父类继承并实现某接口时,这个新的类就把父类的结构和接口的结构组合起来.类的结构模式是静态的. (2)对象的结构模式:对象的结构模式描述

菜鸟学设计模式系列笔记之Prototype模式(原型模式)

菜鸟学设计模式系列笔记之Prototype模式: Intent: 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象 Motivation:以一个已有的对象作为原型,通过它来创建新的对象. 在增加新的对象的时候,新对象的细节创建工作由自己来负责,从而使新对象的创建过程与框架隔离开来. 应用场景: (1)当一个系统应该独立于它的产品创建.构成和表示时 (2)当要实例化的类是在运行时刻指定时,例如动态加载 (3)为了避免创建一个产品类层次平行的工厂类层次时 (4)当一个类的实例只能有几个

菜鸟学设计模式系列笔记之创建型模式简介

设计模式是"封装变化"方法的最佳阐释 无论是创建型模式.结构型模式.还是行为型模式,归根结底都是寻找软件中可能存在的"变化",然后利用抽象的方式对这些变化进行封装. 由于抽象没有具体的实现,就代表了一种无限可能性,使得其扩展成为了可能. 经典设计模式都是在寻找软件中的可能变化,并封装这些变化. 封装通常的理解:将数据(属性)和对数据的操作(方法)放到一个程序单元(类)中,从而使得概念上相关的数据和操作在编程语言上相关:正确的理解:信息隐藏--隐藏细节,对对象内部细节

菜鸟学设计模式系列笔记之抽象工厂模式

抽象工厂模式(Abstract Factory模式): (1)Intent:提供一个创建一系列相关后相互依赖对象的接口,而无需指定它们具体的类-客户端不必指定产品的具体类型,创建多个产品族中的产品对象 (2)Motivation :为保证视感风格标准间的可移植性,应用不应该为一个特定的视感外观硬编码它的窗口组件.在整个应用中实例化特定的视感风格的窗口组建类将使得使得以后很难改变视感的风格. 抽闲工厂模式面对的是多个产品等级结构的系统设计. 工厂方法模式针对的是一个产品等级结构: 抽象工厂模式需要

菜鸟学设计模式系列笔记之单例设计模式(Singleton模式)

特殊的类: (1)类和它的实例间一般是一对多的关系.对大多数的类而言,都可以创建多个实例. 在需要这些实例时创建它们,在这些实例不再有用时删除它们.这些实例的来去伴随着内存的分配和归还. (2)但是有一些类,应该只有一个实例. 这个实例似乎应该在程序启动时被创建出来,且只有在程序结束时才被删除. Intent : 一个类仅有一个实例,自行实例化并向整个系统提供一个访问它的全局访问点 Motivation : 对于一些类来说,只有一个实例是很重要的 Singleton (1)定义一个Instanc

菜鸟学设计模式系列笔记之工厂方法模式

工厂方法模式(Factory Method): Alias :virtual constructory 虚构造器 Intent: 定义一个用于创建对象的接口,让子类决定实例化哪一个类.Factory Method使一个类的实例化延迟到其子类. Motivation:一个框架使用抽象类定义和管理对象之间的关系.这个框架负责去创建这些对象. 工厂方法模式是类的创建模式,又叫做虚拟构造子模式(Virtual Constructor)或者多态性(Polymorphic Factory)工厂模式 工厂方法

菜鸟看设计模式系列笔记之开篇:设计模式的原则及概论

模式是在某一个背景下的某一个问题的解决方案. 设计模式在很大程度上是为了解决软件的可复用性,而根据大量工程实践总结出来的软件体系结构,隐含包括了软件工程的面向对象思想:封装.继承.多态. 为什么需要设计模式:设计模式(Design Pattern )是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结, 使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代码的可靠性. 设计模式一般有如下几个基本要素:模式名称.问题.目的.解决方案.效果.实例代码和相关的设计模式,关键因素包

跟我学设计模式视频教程——装饰模式,装饰模式VS代理模式

课程视频 装饰模式 装饰模式VS代理模式1 装饰模式VS代理模式2 课程笔记 课程笔记 课程代码 课程代码 新课程火热报名中 课程介绍 跟我学设计模式视频教程--装饰模式,装饰模式VS代理模式,布布扣,bubuko.com

跟我学设计模式视频教程——单例模式,建造者VS工厂方法

课程视频 单例模式 建造者VS工厂方法 课程笔记 课程笔记 课程代码 课程代码 新课程火热报名中 课程介绍 跟我学设计模式视频教程--单例模式,建造者VS工厂方法