设计模式-建造者模式

      最近在很多场合都看见设计模式的影子,一直以来,都投入主要时间在搞算法与数据结构,很来发现设计模式真的很重要。有的时候代码的可维护、可重用、可扩展确实胜过单纯的算法效率高。所以拾起大牛书籍《大话设计模式》同时参考网上诸大牛的博客,开始我的设计模式之旅。由于平时编程时用C/C++,现在是Java,也练练Java语法。

       今天先介绍一下建造者模式。

概念:

            建造者模式(Builder):讲一个复杂对象的建造与表示分离,使得同样的建造过程可以创建不同的表示。

组成:

        (1)、抽象表示类:提供一个接口,确定具体表示类的共同特点,通常有接口或抽象类实现;

        (2)、具体表示类:完成或继承抽象表示类,提供产品的实现,

        (3)、建造类:用来指挥建造过程,提供统一的操作;

        (4)、产品类:声明产品类。

优点:

           创建复杂对象的算法应该独立与对象的组成与组装,提供规范化、统一化的产品模型和构建过程。

 

贴段代码:

package Pattern;

import java.util.ArrayList;

/*
 * 产品类
 */
class Product
{
	ArrayList<String>myProductList=new ArrayList<String>();
	public void AddNewProduct(String tempProduct)
	{
		myProductList.add(tempProduct);
	}
	public void ShowAllProduct()
	{
		for(int i=0;i<myProductList.size();i++)
		{
			System.out.print(myProductList.get(i));
		}
		System.out.println();
	}
}

/*
 * 抽象表示类
 */
abstract class Builder
{
	protected Product myProduct=new Product();
	public abstract void BuildPartA();
	public abstract void BuildPartB();
	public abstract Product GetProduct();
}

/*
 * 具体表示类1
 */
class ConcreteBuilder1 extends Builder
{
	public void BuildPartA()
	{
		super.myProduct.AddNewProduct("部件A");
	}
	public void BuildPartB()
	{
		super.myProduct.AddNewProduct("部件B");
	}
	public Product GetProduct()
	{
		return super.myProduct;
	}
}

/*
 * 具体表示类2
 */
class ConcreteBuilder2 extends Builder
{
	public void BuildPartA()
	{
		super.myProduct.AddNewProduct("部件C");
	}
	public void BuildPartB()
	{
		super.myProduct.AddNewProduct("部件D");
	}
	public Product GetProduct()
	{
		return super.myProduct;
	}
}


/*
 * 建造者类
 */
class Director
{
	public void Construct(Builder tempBuilder)
	{
		tempBuilder.BuildPartA();
		tempBuilder.BuildPartB();
	}
}

public class Pattern {
	public static void main(String[] args) {
		try {
			Builder myBuilder1 = new ConcreteBuilder1();
			Builder myBuilder2 = new ConcreteBuilder2();

			Director myDirector = new Director();
			myDirector.Construct(myBuilder1);
			myBuilder1.GetProduct().ShowAllProduct();

			myDirector.Construct(myBuilder2);
			myBuilder2.GetProduct().ShowAllProduct();

		} catch (Exception e) {
			System.out.println("Java异常发生!");
		}
	}
}


 

你可能感兴趣的:(java,设计模式,建造者模式)