zoukankan      html  css  js  c++  java
  • 建造者模式

    1.说明

      游戏中的不同角色,其性别、个性、能力、脸型、体型、服装、发型等特性都有所差异;还有汽车中的方向盘、发动机、车架、轮胎等部件也多种多样;每封电子邮件的发件人、收件人、主题、内容、附件等内容也各不相同。
      以上所有这些产品都是由多个部件构成的,各个部件可以灵活选择,但其创建步骤都大同小异。这类产品的创建无法用前面介绍的工厂模式描述,只有建造者模式可以很好地描述该类产品的创建。

    2.特点

      建造者(Builder)模式的定义:指将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示,这样的设计模式被称为建造者模式。它是将一个复杂的对象分解为多个简单的对象,然后一步一步构建而成。它将变与不变相分离,即产品的组成部分是不变的,但每一部分是可以灵活选择的。

      该模式的主要优点如下:

    1. 各个具体的建造者相互独立,有利于系统的扩展。
    2. 客户端不必知道产品内部组成的细节,便于控制细节风险。


      其缺点如下:

      1. 产品的组成部分必须相同,这限制了其使用范围。
      2. 如果产品的内部变化复杂,该模式会增加很多的建造者类。

    3.结构 

      1. 模式的结构

      建造者(Builder)模式的主要角色如下。

    1. 产品角色(Product):它是包含多个组成部件的复杂对象,由具体建造者来创建其各个滅部件。
    2. 抽象建造者(Builder):它是一个包含创建产品各个子部件的抽象方法的接口,通常还包含一个返回复杂产品的方法 getResult()。
    3. 具体建造者(Concrete Builder):实现 Builder 接口,完成复杂产品的各个部件的具体创建方法。
    4. 指挥者(Director):它调用建造者对象中的部件构造与装配方法完成复杂对象的创建,在指挥者中不涉及具体产品的信息。

      

    4.程序

    package com.jun.design.create;
    
    /**
     * 建造者模式
     */
    public class BuilderPattern {
        public void main(String[] args) {
            Builder builder=new ConcreteBuilder();
            Director director=new Director(builder);
            Product product=director.construct();
            product.show();
        }
    
        class Product
        {
            private String partA;
            private String partB;
            private String partC;
            public void setPartA(String partA) {
                this.partA=partA;
            }
            public void setPartB(String partB) {
                this.partB=partB;
            }
            public void setPartC(String partC) {
                this.partC=partC;
            }
            public void show() {
                //显示产品的特性
            }
        }
    
        abstract class Builder
        {
            //创建产品对象
            protected Product product=new Product();
            public abstract void buildPartA();
            public abstract void buildPartB();
            public abstract void buildPartC();
            //返回产品对象
            public Product getResult() {
                return product;
            }
        }
    
        public class ConcreteBuilder extends Builder
        {
            @Override
            public void buildPartA() {
                product.setPartA("建造 PartA");
            }
            @Override
            public void buildPartB() {
                product.setPartA("建造 PartB");
            }
            @Override
            public void buildPartC() {
                product.setPartA("建造 PartC");
            }
        }
    
        class Director
        {
            private Builder builder;
            public Director(Builder builder)
            {
                this.builder=builder;
            }
            //产品构建与组装方法
            public Product construct()
            {
                builder.buildPartA();
                builder.buildPartB();
                builder.buildPartC();
                return builder.getResult();
            }
        }
    
    }
    

      

  • 相关阅读:
    点滴积累【JS】---JS小功能(JS实现侧悬浮浮动)
    点滴积累【JS】---JS小功能(JS实现隐藏显示侧边栏,也就是分享栏的隐藏显示)
    点滴积累【JS】---JS小功能(JS实现排序)
    php修改排序,上移下移
    PHP获取上周、本周、上月、本月、本季度、上季度时间方法大全
    php简陋版实现微信公众号主动推送消息
    JQuery处理json与ajax返回JSON实例
    页面滚动动态加载数据,页面下拉自动加载内容 jquery
    CGI/FASTCGI/ISAPI区别
    CodeIgniter类库之Benchmarking Class ,计算代码的执行时间
  • 原文地址:https://www.cnblogs.com/juncaoit/p/13451466.html
Copyright © 2011-2022 走看看