zoukankan      html  css  js  c++  java
  • [置顶] 设计模式系列5-建造者模式

    设计模式系列5-建造者模式


    前言:

    建造者模式(Builder)前一节讲了抽象工厂模式,这节讲23种设计模式之建造者模式。


    什么是建造者模式?

    将一个复杂对象的构建与它的表现分离,使得同样的构建过程可以创建不同的表现。(最初的定义出现于《设计模式》(Addison-Wesley,1994)).


    何时使用建造者模式?

    在以下情境,自然会想到使用这一模式:
    1.需要创建涉及各种部件的复杂对象。创建对象的算法应该独立于部件的半杯方式 。常见例子是构建组合对象。
    2.构建过程需要以不同的方式(例如,部件或表现的不同组合)构建对象。


    角色:

    在此设计模式中,有以下几个角色:
    1.Builder:为创建一个产品对象的各个部件指定抽象接口;
    2.ConcreteBuilder:实现Builder的接口以构造和装配该产品的各个部件,定义并明确它所创建的表示,并提供一个检索产品的接口;
    3.Director:构造一个使用Builder接口的对象;
    4.Product:表示被构造的复杂对象。ConcreteBuilder创建该产品的内部表示并定义它的装配过程,包含定义组成部件的类,包括将这些部件装配成最终产品的接口。


    建造者模式的实现:

    1.建造者模式在Java中的实现:
    Build
    public interface Builder {
    	public void buildHead();
    	
    	public void buildBody();
    	
    	public void buildFoot();
    	
    	public Person buildPerson();
    }

    ConcreteBuilder

     

    public class ConcreteBuilder implements Builder {
    	Person person;
    	
    	public ConcreteBuilder() {
    		person = new Person();
    	}
    
    	@Override
    	public void buildHead() {
    		person.setHead("创建人的头部");
    		
    	}
    
    	@Override
    	public void buildBody() {
    		person.setBody("创建人的身体");
    	}
    
    	@Override
    	public void buildFoot() {
    		person.setFoot("创建人的脚");
    	}
    
    	@Override
    	public Person buildPerson() {
    		return person;
    	}
    }


    Director

     

    public class Director {
    	public Person constructPerson(Builder builder) {
    		builder.buildHead();
    		builder.buildBody();
    		builder.buildFoot();
    		
    		return builder.buildPerson();
    	}
    }


    Product

     

    public class Person {
    	
    	private String head;
    	
    	private String body;
    	
    	private String foot;
    
    	public String getHead() {
    		return head;
    	}
    
    	public void setHead(String head) {
    		this.head = head;
    	}
    
    	public String getBody() {
    		return body;
    	}
    
    	public void setBody(String body) {
    		this.body = body;
    	}
    
    	public String getFoot() {
    		return foot;
    	}
    
    	public void setFoot(String foot) {
    		this.foot = foot;
    	}
    }

    Test测试代码

     

    public class Test {
    	public static void main(String[] args) {
    		Builder builder = new ConcreteBuilder();
    		Director director = new Director();
    		Person person = director.constructPerson(builder);
    		
    		System.out.println(person.getHead());
    		System.out.println(person.getBody());
    		System.out.println(person.getFoot());;
    	}
    
    }


    测试结果如下图:


     

    建造者模式与抽象工厂模式的区别:

    1.建造者模式关注的是分步创建复杂对象,很多时候同一类型的对象可以以不同的方式创建。
    2.抽象工厂的重点在于创建简单或者复杂产品的套件。
    3.建造者模式在创多步建过程的最后一步返回产品,而抽象工厂模式则立刻返回产品。





  • 相关阅读:
    Java静态类
    【Java TCP/IP Socket】深入剖析socket——TCP套接字的生命周期
    【Java TCP/IP Socket】深入剖析socket——TCP通信中由于底层队列填满而造成的死锁问题(含代码)
    【Java TCP/IP Socket】深入剖析socket——数据传输的底层实现
    【Java TCP/IP Socket】基于NIO的TCP通信(含代码)
    【Java TCP/IP Socket】Java NIO Socket VS 标准IO Socket
    【Java TCP/IP Socket】TCP Socket通信中由read返回值造成的的死锁问题(含代码)
    数据结构课后练习题(练习三)7-5 Tree Traversals Again (25 分)
    快速排序详解(lomuto划分快排,hoare划分快排,classic经典快排,dualpivot双轴快排源码)
    Java多线程(一)——线程基础和锁锁锁
  • 原文地址:https://www.cnblogs.com/fuhaots2009/p/3363613.html
Copyright © 2011-2022 走看看