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();
    }
    
    • 建造者模式是在当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时适用的模式。
  • 相关阅读:
    【转】线程的7种状态及相互转换
    java timer 使用:
    LayoutInflater
    java中Thread与Runnable的区别
    php上传程序到服务器后出错smarty1259
    cakephp ajax
    纯真IP数据库的应用IP地址转化成十进制
    对数组里的元素进行排序
    smarty中的cache_id问题
    箴言
  • 原文地址:https://www.cnblogs.com/sanjun/p/8370837.html
Copyright © 2011-2022 走看看