• 建造模式


    建造模式是对象的创建模式,建造模式可以将一个产品的内部表象与产品的生产过程分割开来,从而可以使一个建造过程生成具有不同的内部表象的产品对象。
    在这个模式中,有四个角色;
            抽象建造者:给出一个抽象接扩口,以规范产品对象的各个组成成分的建造,一般而言,此接口独立于应用程序的商业逻辑,模式中直接创建产品对象的是具体建造者角色,具体建造者类必须实现这个接口所要求的两种方法,一种是建造方法,另一种是返还结构方法,一般而言,产品所包含的零件数目与建造方法的数目相符,换言之,有多少零件,就有多少相应的建造方法;
            具体建造者角色:担任这个角色的是与应用程序紧密相关的一些类,他们在应用程序调用下创建产品的实例,这个角色要完成的任务包括:1,实现抽象建造者Builder所声明的接口,给出一步一步地完成创建产品实例的操作。2,在建造过程完成后,提供产品的实例;
            导演者角色:担任这个角色的类调用具体建造者角色以创建产品对象。应当指出的是,导演者角色并没有产品类的具体知识,真正拥有产品类的具体知识的是具体建造者角色;
            产品角色:产品是建造中的复杂对象,一般来说,一个系统中会有多于一个的产品类,而且这些产品类并不一定有共同的 接口,而完全可以是不相关联的;
    我们可以举一个盖房子工程的例子来说明:我们知道,盖一个房子要的角色有盖房子的各种各样的材料,一个盖房子的工人,还要有一个负责设计的工程师,我们先来说一下各自的特点,作为一个工人,他知道如何去盖厕所,盖大厅,知道怎么具体地使用这些材料,但是,他不具备设计的能力,因为他不会画那些设计图纸,而作为工程师来说,他负责指挥工人去按他所设计的图纸去盖房子,但是他并不知道怎么具体地使用这些材料,因为他不必下工地,没有那些工人的经验老道,这样的话,下次你依然可以用这些相同的材料去盖出不同风格的房子出来,这里还可以有一个房子的主人的角色,他的任务是雇包工头,并给包工头指派了工人,还有材料,然后让包工头自己去负责设计,自己只要最后得到这个房子就可以了。这就是建造者模式。下面是代码;
    首先是产品类;
    package Build;
    
    public class Product {
    
          public Product() {
                // TODO Auto-generated constructor stub
          }
    
          private String part1;
          private String part2;
          public String getPart1() {
                return part1;
          }
          public void setPart1(String part1) {
                this.part1 = part1;
          }
          public String getPart2() {
                return part2;
          }
          public void setPart2(String part2) {
                this.part2 = part2;
          }
          
    }
    

      建造者抽象类;

    package Build;
    
    public interface Builder {
    
          public void buildPart1();
          public void buildPart2();
          public Product retrieveResult();
    }
    

      具体建造者类;

    package Build;
    
    public class ConcreteBuilder implements Builder{
    
          public ConcreteBuilder() {
                // TODO Auto-generated constructor stub
          }
          
          private Product product = new Product();
          @Override
          public void buildPart1(){
                product.setPart1("编号:9527");
          }
          @Override
          public void buildPart2(){
                product.setPart2("名称:XXX");
          }
          @Override
          public Product retrieveResult(){
                return product;
          }
    }
    

      导演者类;

    package Build;
    
    public class Director {
    
          public Director() {
                // TODO Auto-generated constructor stub
          }
          private Builder builder;
          public Director(Builder builder){
                this.builder = builder;
          }
    
          public void construct(){
                builder.buildPart1();
                builder.buildPart2();
          }
    }
    

      客户端类;

    package Build;
    
    public class Client {
    
          public Client() {
                // TODO Auto-generated constructor stub
          }
    
          public static void main(String[] args){
                Builder builder = new ConcreteBuilder();
                Director director = new Director(builder);
                director.construct();
                Product product = builder.retrieveResult();
                System.out.println(product.getPart1());
                System.out.println(product.getPart2());
          }
    }
    

      

  • 相关阅读:
    如何使用 Cdosys.dll 库使用 Visual C# 中发送电子邮件带有附件接收邮件
    Top 126 Ajax Tutorials
    javascript 操作日期 测试(注意浏览器兼容问题)
    Reference List between HTTP_ACCEPT_LANGUAGE Servervariable value, Locale ID (LCID) and Language区域化设置
    Locale ID (LCID) Chart 区域设置ID
    cookieLibrary.js 写入cookie的JavaScript代码库
    如何使用 Cdosys.dll 库使用ASP发送邮件带附件
    Excel 工作表,单元格破解密码宏
    World Currency Symbols世界货币符号
    Dijkstra's Shortest Path Algorithm(最短路径算法)
  • 原文地址:https://www.cnblogs.com/zxx123/p/8599518.html
Copyright © 2020-2023  润新知