设计模式--建造者模式(builder)

news/2024/7/4 15:33:05
建造者模式
概述
    将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
适用性
    1.当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时。

    2.当构造过程必须允许被构造的对象有不同的表示时。
参与者
    1.Builder
      为创建一个Product对象的各个部件指定抽象接口。

    2.ConcreteBuilder
      实现Builder的接口以构造和装配该产品的各个部件。
      定义并明确它所创建的表示。
      提供一个检索产品的接口。

    3.Director
      构造一个使用Builder接口的对象。

    4.Product
      表示被构造的复杂对象。ConcreteBuilder创建该产品的内部表示并定义它的装配过程。
      包含定义组成部件的类,包括将这些部件装配成最终产品的接口。
Example
Builder 
public interface PersonBuilder {

    void buildHead();
    
    void buildBody();
    
    void buildFoot();

    Person buildPerson();
}
ConcreteBuilder 
public class ManBuilder implements PersonBuilder {

    Person person;
    
    public ManBuilder() {
        person = new Man();
    }
    
    public void buildBody() {
        person.setBody("建造男人的身体");
    }

    public void buildFoot() {
        person.setFoot("建造男人的脚");
    }

    public void buildHead() {
        person.setHead("建造男人的头");
    }

    public Person buildPerson() {
        return person;
    }
}
Director 
public class PersonDirector {

    public Person constructPerson(PersonBuilder pb) {
        pb.buildHead();
        pb.buildBody();
        pb.buildFoot();
        return pb.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;
    }
}
public class Man extends Person {

}
Test 
public class Test{
    
    public static void main(String[] args) {
        PersonDirector pd = new PersonDirector();
        Person person = pd.constructPerson(new ManBuilder());
        System.out.println(person.getBody());
        System.out.println(person.getFoot());
        System.out.println(person.getHead());
    }
}
result 
建造男人的身体
建造男人的脚
建造男人的头

转载于:https://www.cnblogs.com/hainange/archive/2009/05/04/6153177.html


http://www.niftyadmin.cn/n/1978423.html

相关文章

骚操作之rsync下行同步+lnotify实时同步详解

文章目录一、rsync同步加简介1、关于rsync2、rsync同步源(备份源)二、配置rsync备份源三、Rsync命令基本用法1、基本格式2、常用选项四、配置发起端(backuper)五、配置RsyncInotify实时同步一、rsync同步加简介 1、关于rsync rsync(Remote Sync,远程同步…

超几何分布和二项分布【中阶高阶辅导】

前言 二项分布与超几何分布是两个非常重要的、应用广泛的概率模型,实际中的许多问题都可以利用这两个概率模型来解决.在实际应用中,理解并区分两个概率模型是至关重要的.下面举例进行对比辨析. 一、概念辨析 超几何分布…

Cisco *** 完全配置指南-连载-详解路由器的站点到站点IPSec ***连接问题(1)

Cisco *** 完全配置指南-连载-详解路由器的站点到站点IPSec ***连接问题(1)详细内容见附件

骚操作之ELK日志分析系统

文章目录前言一、ELK日志分析系统简介1、日志处理的步骤2、ELK日志分析系统三部分3、日志服务器二、Elasticsearch介绍1、Elasticsearch概述2、Elasticsearch的概念3、采用分片4、开启分片副本的主要原因三、Logstash介绍1、Logstash概述2、Logstash主要组件四、Kibana介绍1、K…

nginx+lua(openresty) lua-mongodb 安装及使用(四)

前言 前章已经讲述 ua-protobuf 安装及使用 这章主要讲述 openresty 环境下 lua-mongodb 安装及使用 1:环境 ubuntu16(18) mongodb 3.6 2:安装mongodb 3.6 sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 2930ADAE8CAF5059EE73BB4B58712A2291FA4AD5 #创…

apahce启用http2

2019独角兽企业重金招聘Python工程师标准>>> 需要前置条件传送门 其实前置做完了,h2是很简单的事 1.apache启用http2_module 2.打开apche的配置文件,写上 Protocols h2 http/1.1 3.重启apache,打开浏览器看看吧 转载于:https://my.oschina.net/u/3470006/blog/20560…

Docker骚操作五十四话之docker基本介绍

文章目录前言一、虚拟化二、KVM虚拟化三、Docker1、docker是什么?2、docker的使用场景3、使用docker有什么意义4、docker的使用场景四、docker引擎五、docker和虚拟机的区别六、docker的核心概念1、镜像2、容器3、仓库前言 以linux而言,linux操作系统会…

手动关闭危险端口

我们手动关闭一些危险端口包括 3389 445 135 139 禁用NETBIOS 以下关闭关口方式是通过修改注册表来完成关闭445端口-----445端口是一个毁誉参半的端口,他和139端口一起是IPC$***的主要通道。有了它我们可以在局域网中轻松访问各种共享文件夹或共享打印机&#xff0c…