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

    概述

           建造模式可以将一个产品内部表象与产品生成过程分割开,从而可以使一个建造过程生成具有不同内部表象的产品对象。

           内部表象:一个产品常有不同的组成成分作为产品的零件,零件可能是对象,也可能不是对象,他们通常叫做产品的内部表象。

           不同产品有不同的内部表象,也就是不同的零件,使用建造模式可以使客户端不需要知道所生产产品对象有哪些零件,是怎么建造的,及怎么组成产品。

              所以我们就希望能够像使用汽车一样使用复杂的对象:直接告诉你我需要的对象名或者对象类型,你返回一个完成的对象实例给我。建造者返回给客户一个完整的的产品对象,而客户端无须关心该对象所包含的额属性和组建方式,这就是建造者模式的设计动机。

           建造者模式构建复杂对象就像造汽车一样,是一个一个组件一个一个步骤创建出来的,它允许用户通过制定的对象类型和内容来创建他们,但是用户并不需要知道这个复杂对象是如何构建的,它只需要明白通过这样做我可以得到一个完整的复杂对象实例。

           

       抽象建造者Builder:给顶一个接口,规范产品对象的各个成分建造。有两种方法1,产品各个成分构造过程  buildPartyA,有多少个零件就有多少个方法  2  返回结果方法

        具体建造者concreteBuilder:抽象建造者的实现。

    Director:指挥者。构建一个使用Builder接口的对象。它主要是用于创建一个复杂的对象,它主要有两个作用,一是:隔离了客户与对象的生产过程,二是:负责控制产品对象的生产过程。
       Product:产品角色。一个具体的产品对象。

           导演者角色和客户端打交到,导演者将客户端创建产品的请求划分为对各个零件建造的请求,将这些请求委派给具体建造者角色,建造者角色是做具体建造工作,却不 为客户端所知,

         一般来说,每个产品类就有过一个相应的具体建造者类,这些产品应当有一样数目的零件,而一个零件有一个建造方法。

    class Porduct{}
    abstract class Builder{
        public abstract void buildPart1();
        public abstract void buildPart2();
        public abstract Porduct returnProduct();
    }
    
    class ConcreteBuilder extends Builder{
    
        private Porduct product = new Porduct();
        @Override
        public void buildPart1() {
        }
        @Override
        public void buildPart2() {    
        }
        @Override
        public Porduct returnProduct() {
            return product;
        }
    }
    
    class Driector{
        private Builder b = new ConcreteBuilder();
        public void construct(){
            b.buildPart1();
            b.buildPart2();
            b.returnProduct();
        }
    }
    View Code

    JavaMeal

    使用场景

               1  产品对象有复杂的内部结构

               2  对象属性相互依赖,如果一个属性必须在另一个属性被赋值后赋值。模式可以实行一种分步骤经行的建造过程。

               3  即使属性间无依赖,但属性赋值前不能使用。

  • 相关阅读:
    C# 杂项
    C# 数组
    我的博客第一天
    Java使用多线程异步执行批量更新操作
    Python爬取百度图片
    以友盟+U-Push为例,深度解读消息推送的筛选架构解决方案应用与实践
    python自动化办公之爬取HTML图片写入PPT实战
    理解Python闭包,这应该是最好的例子
    爬取b站《守护解放西》弹幕
    爬取b站《守护解放西》弹幕
  • 原文地址:https://www.cnblogs.com/whesuanfa/p/7382047.html
Copyright © 2011-2022 走看看