zoukankan      html  css  js  c++  java
  • Builder

    建造模式

    有些情况,一个对象会有一些重要的性质,在它们没有恰当的值之前,对象都不能为一个完整的产品使用。比如一封Email,必须有发件人地址、主题、内容等信息,否则是不能发送出去的。此时,这对象相当于一个有待建造的产品,而对象的性质相当于产品的零件。建造产品的过程就是建造零件的过程,建造者返回给客户端的是一个全部零件都建造好的产品对象。

    在这个示意的UML图,最终产品 Product 只有两个零件:part1 和 part2 , 相应的建造方法是 builderPart1 和 builderPart2 。

    • 抽象建造者(Builder)角色:给出一个抽象接口,给规范产品的对象的各个组成成分的建造。具体建造者除了建造的方法之外,还要有一个返回结果的方法(retrieveResult)。一般来说,有多少零件,就有多少个建造方法。
    • 具体建造者(Concrete Builder):创建产品的实例
    • 导演者(Director):调用建造者角色以及其产品,导演者并没有产品类的具体知识,真正拥有产品类的具体知识是建造者角色。
    • 产品(Product):建造中的复杂对象。在系统中会多于一个产品类,而且这些产品类不一定同一个接口,可以完全无关联的。
    public abstract class Builder {
    
        public abstract void builderPart1();
    
        public abstract void builderPart2();
    
        public abstract Product retrieveResult();
    }
    public class ConcreteBuilder extends Builder {
    
        private Product product = new Product();
        
        @Override
        public void builderPart1() {
            product.add("-- builderPart1");
        }
    
        @Override
        public void builderPart2() {
            product.add("-- builderPart2");
        }
    
        @Override
        public Product retrieveResult() {
            return product;
        }
    
    }
    public class Product {
    
        private LinkedList<String> parts = new LinkedList<String>();
    
        public void add(String part) {
            parts.add(part);
        }
    
        public void show() {
            for (String part : parts) {
                System.out.println(part);
            }
        }
    
    }
    public class Director {
    
        private Builder builder;
        
        public Director(){
            
        }
        
        public void construct(){
            builder = new ConcreteBuilder();
            builder.builderPart1();
            builder.builderPart2();
            builder.retrieveResult();
        }
        
    }
  • 相关阅读:
    微软推出的免费新书《Introducing Microsoft SQL Server 2012》
    关于Installshield中Ie8\Ie9\SQL Server 2008 R2 Native Client等Prq文件在线下载地址
    PowerDesigner批量生成日期型、中文字符型、数字型测试数据
    在服务器上使用第三方独立组件对Word/Excel进行编程
    文明源自谎言
    中文写程序,何陋之有?
    在线网摘收藏?让Google来吧!
    下载文件时根据MIME类型自动判断保存文件的扩展名
    谨慎注意WebBrowser控件的DocumentCompleted事件
    你的命运谁攥着?
  • 原文地址:https://www.cnblogs.com/xuekyo/p/2830384.html
Copyright © 2011-2022 走看看