zoukankan      html  css  js  c++  java
  • C++通过内部类实现Builder模式

    在Java中有一个很好用的Builder模式实现方法。此处使用C++仿照Java的版本实现Builder模式。

    在C++中内部类和外部类是没有直接关系的,不能通过内部类访问外部类的私有对象也不能通过外部类访问内部类的私有对象。所以此处使用friend关键字来增强内部类对于外部类的访问,主要是访问外部类的私有构造函数。代码如下:

    #include <iostream>
    #include <memory>
    using namespace std;
    
    class BuilderDemo
    {
    public:
        class Builder
        {
        public:
            int servingSize;
            int servings;
            
            Builder(int servingSize, int servings)
            :servingSize(servingSize),servings(servings)
            {
            }
            
            shared_ptr<BuilderDemo> build()
            {
                return shared_ptr<BuilderDemo>(new BuilderDemo(*this));
            }
        };
        
    private:
        BuilderDemo(const Builder& builder)
        {
            servingSize = builder.servingSize;
            servings = builder.servings;
        }
        
        friend class Builder;
        
    private:
        int servingSize;
        int servings;
    };
    
    
    int main()
    {
        BuilderDemo::Builder builder(4, 43);
        shared_ptr<BuilderDemo> demo = builder.build();
    
    }

    此处省略了外部类的部分成员变量,一般情况当外部类的成员变量个数在4个以上的时候可以使用Builder模式。

  • 相关阅读:
    kuberbetes1.17.3二进制安装
    jvm启动cpu和负载高分析
    kubeadm安装的k8s集群证书过期处理
    Mongodb 相关链接
    perl 之 正则表达式 (简)
    ssh-copy-id 拷贝用户秘钥
    unicode & utf-8
    Python之路,Day3
    Python Day2 (二)
    find xargs 简单组合使用
  • 原文地址:https://www.cnblogs.com/vectorli/p/5405037.html
Copyright © 2011-2022 走看看