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

    建造者模式:

    • 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

    示例代码:

    • Product类————产品类,由多个部件组成。
    class Product {
        IList<String> parts = new List<String>();
        public void Add(String part) {
            part.Add(part);
        }
        
        public void Show() {
            Console.WriteLine("
    产品 创建 ----");
            //列举所有的产品的部件
            foreach (String part in parts) {
                Console.WriteLine(part);
            }
        }
    }
    
    • Builder类————抽象建造者类,确定产品由两个部件PartA和PartB组成,并声明一个得到产品建造后结果的方法GetResult。
    abstract class Builder {
        public abstract void BuildPartA();
        public abstract void BuildPartB();
        public abstract Product GetResult();
    }
    
    • ConcreteBuilder1类————具体建造者类。
    class ConcreteBuilder1 : Builder {
        private Product product = new Product();
        
        public override void BuilderPartA() {
            product.Add("部件A");
        }
        
        public override void BuilderPartB() {
            product.Add("部件B");
        }
        
        public override Product GetResult() {
            return product;
        }
    }
    
    • ConcreteBuilder2类————具体建造者类。
    class ConcreteBuilder2 : Builder {
        private Product product = new Product();
        
        public override void BuilderPartA() {
            product.Add("部件X");
        }
        
        public override void BuilderPartB() {
            product.Add("部件Y");
        }
        
        public override Product GetResult() {
            return product;
        }
    }
    
    • Director类————指挥者类
    class Director {
        public void Construct(Builder builder) {
            builder.BuilderPartA();
            builder.BuilderPartB();
        }
    }
    
    • 客户端代码,客户不需知道具体的建造过程。
    static void Main(String[] args) {
        Director director = new Director();
        Builder b1 = new ConcreteBuilder1();
        Builder b2 = new ConcreteBuilder2();
        
        //指挥者用ConcreteBuilder1的方法来建造产品
        director.Construct(b1);
        Product p1 = b1.GetResult();
        p1.Show();
    
        //指挥者用ConcreteBuilder2的方法来建造产品    
        director.Construct(b2);
        Product p2 = b2.GetResult();
        p2.Show();
    }
    
    • 建造者模式是在当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时适用的模式。
  • 相关阅读:
    如何自己手写一个热加载(转)
    阻塞I/O、非阻塞I/O和I/O多路复用、怎样理解阻塞非阻塞与同步异步的区别?
    Java NIO浅析 转至 美团技术团队
    mysql在线修改表结构大数据表的风险与解决办法归纳(转)
    MySQL性能优化
    Tomcat Connector(BIO, NIO, APR)三种运行模式(转)
    redis 单线程的理解
    Spring 中的bean 是线程安全的吗?
    Spring 自定义注解,结合AOP,配置简单日志注解 (转)
    redis 分布式锁
  • 原文地址:https://www.cnblogs.com/sanjun/p/8370837.html
Copyright © 2011-2022 走看看