`
gengu
  • 浏览: 86599 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

建造者模式

阅读更多

今天学习了建造者模式

 

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

 

建造者模式中,有如下四种角色

1:Product产品类 通常实现的是模板方法和基本方法

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

3:ConcreteBuilder 是先抽象类定义的所有方法,并且返回一个组建好的对象

4:Director导演类 负责安排一有模板的顺序,然后告诉Builder开始建造

 

假设有这样一种情况。我现在想要创建各种不同的动物,我已经归纳出了所有动物可能存在的活动:吃,跑,爬,叫,跳五种

我想能创建各种不同的动物他们可以组合各种活动。比如羊:吃,跑,叫;乌龟:吃,爬;等等等,或者还要规定这些动物的活动顺序等。

 

如果不适用建造者模式,那么情况就会变得非常复杂,因为你每多一种动物,就要多写一个实现类,而需求的变化是无限的,所以想到适用建造者模式。

 

Product产品类

package com.gengu.建造模式;

import java.util.ArrayList;
import java.util.List;

/**
 * 动物的抽象模板
 * 定义了很多动物所公有的特性
 * */
public class Animal {

	/**定义这个动物的活动顺序*/
    List<String> list = new ArrayList<String>(); 
	//跑
	public void run(){
		System.out.println("running");
	}
	//叫
	public void cry(){
		System.out.println("crying");
	}
	//吃
	public void eat(){
		System.out.println("eating");
	}
	//爬
	public void crawl(){
		System.out.println("crawling");
	}
	//跳
	public void jump(){
		System.out.println("jumping");
	}
	
	//执行方法
	public void execute(){
		for(String str:list){
			if(str.equalsIgnoreCase("run")){
				this.run();
			}else if(str.equalsIgnoreCase("eat")){
				this.eat();
			}else if(str.equalsIgnoreCase("crawl")){
				this.crawl();
			}else if(str.equalsIgnoreCase("jump")){
				this.jump();
			}else if(str.equalsIgnoreCase("cry")){
				this.cry();
			}
		}
	}
}

 Builder抽象建造者

package com.gengu.建造模式;

import java.util.List;
/**由它来构建各种动物 要什么样的动物都由相关的子类完成*/
public abstract class AnimalBuilder {

	//构建各种动物的活动组合
	public abstract void setList(List<String> list); 
	
	//返回我们创建的动物
	public abstract Animal getAnimal();
}

 动物的实现类

package com.gengu.建造模式;

import java.util.List;

public class ConcreteAnimal extends AnimalBuilder{

	//定义一个私有变量
	private Animal animal = new Animal();
	@Override
	public Animal getAnimal() {
		return this.animal;
	}

	@Override
	public void setList(List<String> list) {
		this.animal.list = list;
	}

}

 导演类,规定了羊怎么创建,乌龟怎么创建

package com.gengu.建造模式;

import java.util.ArrayList;
import java.util.List;
/**导演类*/
public class Director {

	List<String> list = new ArrayList<String>();
	AnimalBuilder animalBuilder = new ConcreteAnimal();
	
	/**
	 * 得到羊
	 * 那么就有:跑,叫,吃的活动
	 * */
	public Animal getSheep(){
		list.clear();
		list.add("run");
		list.add("eat");
		list.add("cry");
		this.animalBuilder.setList(list);
		return this.animalBuilder.getAnimal();
	}
	
	/**
	 * 得到乌龟
	 * 那么就有:吃,爬的活动
	 * */
	public Animal getTortoise(){
		list.clear();
		list.add("crawl");
		list.add("eat");
		this.animalBuilder.setList(list);
		return this.animalBuilder.getAnimal();
	}
}

 测试类

package com.gengu.建造模式;

public class Client {

	public static void main(String[] args) {
		Director director = new Director();
		Animal sheep = director.getSheep();
		System.out.println("羊的活动有以下几种");
		sheep.execute();
		System.out.println("================");
		Animal tortoise = director.getTortoise();
		System.out.println("乌龟的活动有以下几种");
		tortoise.execute();
	}
}

 

这样的话,如果我需要再扩展一个鸵鸟,那么只需要在导演类里面添加一个得到鸵鸟的方法,扩展性非常好。它将创建产品的细节放到了导演类中,这样具有很好的安全性,因为各个动物的创建过程是独立的,不对其他任何模块产生影响。

 

 

分享到:
评论

相关推荐

    设计模式——建造者模式

    建造者模式是一种结构型设计模式,它允许我们分步骤创建复杂对象,而无需暴露构建过程的内部细节。这种模式在Java编程中非常常见,尤其是在处理需要多种构建方式或需要隔离对象构造过程的场景。 建造者模式的核心...

    建造者模式c++实现

    建造者模式是一种设计模式,它将复杂对象的构建与其表示分离,使得同样的构建过程可以创建不同的表示。在C++中实现建造者模式,我们可以遵循以下步骤: 首先,我们需要定义一个抽象建造者(Builder)类,它声明了一...

    设计模式之建造者模式代码示例

    建造者模式(Builder Pattern)是软件工程中一种用于创建对象的抽象工厂方法,它将复杂的构建过程分解为一系列步骤,使得构建过程可以独立于其表示进行。这种模式允许客户端使用相同的构建过程创建不同表现形式的...

    设计模式之建造者模式

    建造者模式(Builder Pattern)是设计模式中的一种创建型模式,它允许我们分步骤构建复杂的对象,通过将构造过程与对象本身分离,使得同样的构造过程可以创建不同的表示。这种模式常用于当创建对象的步骤复杂或者...

    建造者模式.pptx

    ### 建造者模式详解 #### 模式介绍 建造者模式(Builder Pattern)是设计模式中的一种,主要用于创建复杂对象。此模式的核心在于将一个复杂对象的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。简单...

    Java建造者模式源码

    Java建造者模式是一种设计模式,属于创建型模式,它的主要目的是通过隔离对象的构建过程和其表示,使得构造复杂对象的过程更加灵活。这种模式通常在需要创建对象的多个部分,并且这些部分可能需要以特定顺序组合时...

    设计模式-建造者模式

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

    ios 进阶 建造者模式

    建造者模式,也被称为Director模式,是设计模式中的一种创建型模式。在iOS开发中,尤其是在构建复杂对象或者需要进行定制化组装时,建造者模式显得尤为重要。它将产品的构造过程与产品本身分离,使得创建过程更加...

    建造者模式实例

    建造者模式是一种设计模式,属于创建型模式,它允许我们分步骤构建复杂对象,而无需暴露构造过程。这种模式在IT行业中广泛应用于软件系统中,尤其是当需要创建的对象具有多种可变构造选项时。大众CC是一款知名的轿车...

    C#设计模式之建造者模式

    建造者模式是软件设计模式中的一种,主要用于将复杂的对象构建过程与对象的使用分离,使得同样的构建过程可以创建不同的表示。在C#中,我们可以通过类的继承和接口的使用来实现这一模式。以下是关于“C#设计模式之...

    java 建造者模式

    建造者模式(Builder Pattern)是Java设计模式中的创建型模式之一,它允许我们分步骤创建复杂的对象,通过将构造过程与表示分离,使得同样的构造过程可以创建不同的表示。这种模式通常用于那些具有多种构建方式或者...

    设计模式-建造者模式(讲解及其实现代码)

    建造者模式,是一种创建型设计模式,它提供了一种创建对象的最佳方式,特别是在对象的构建过程比较复杂,需要多个步骤时。在建造者模式中,我们创建一个指导对象(Director),该对象负责组织构建过程,而具体的构建...

    java 建造者模式代码

    建造者模式是一种设计模式,它将复杂对象的构建与其表示分离,使得同样的构建过程可以创建不同的表示。在Java中,这种模式通常用于构建对象时,尤其是当对象的构造过程复杂,需要多步骤或者允许用户自定义构建过程时...

    qt5编写的建造者模式程序

    【建造者模式】是软件工程中的一个设计模式,属于创建型模式,它隔离了对象的构造过程,并允许用户以步骤化的方式创建复杂对象。在Qt5框架中,我们可以利用其强大的C++支持来实现建造者模式,这对于创建复杂的UI或者...

    c++ 建造者模式实例

    建造者模式: 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表现。这就是建造者模式。 建造者模式可以把一个产品的内部表象与产品的生成过程分隔开来,从而可以使一个建造过程就可以生成...

    设计模式例子,观察者模式,建造者模式

    在给定的压缩包文件中,"设计模式例子,观察者模式,建造者模式" 提到了两种重要的设计模式:观察者模式(Observer Pattern)和建造者模式(Builder Pattern)。下面我们将深入探讨这两种设计模式的概念、应用场景、...

    建造者模式学习以及与工厂模式的区别

    建造者模式(Builder Pattern)是一种创建型设计模式,它提供了一种方法来分步骤构建复杂的对象,使得构建过程和表示分离。这种模式常用于当一个对象的构建过程复杂且需要多个步骤时,或者当我们希望同一个构建过程...

Global site tag (gtag.js) - Google Analytics