`
kmplayer
  • 浏览: 509174 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

设计模式之单件模式

阅读更多
1,单件(Singleton):允许一个类有且仅有一个实例.
#include <iostream>
#include <stdexcept>
using namespace std;

class Singleton
{
    //私有
    Singleton(int x):i(x){}
    Singleton(const Singleton&);
    Singleton& operator=(Singleton&);
    int i;
public:
    //返回引用
    //一个类中的任何static成员都可表示一个单件
    static Singleton& instance()
    {
        static Singleton s(43);
        return s;
    }
    void setVal(int x){ i=x; }
    int getVal(){ return i; }
};

int main()
{
    Singleton& s=Singleton::instance(); //这里必须声明为引用
    cout<<s.getVal()<<endl;
    s.setVal(15);
    cout<<s.getVal()<<endl;
    return 0;
}


2,信使(messenger):将消息封装到一个对象中到处传递.
#include <iostream>
using namespace std;

class Point
{
public:
    int x,y,z;
    Point(int a,int b,int c):x(a),y(b),z(c){}
    Point(const Point& p):x(p.x),y(p.y),z(p.z){}
    Point& operator=(const Point& rhs)
    {
        this->x=rhs.x;
        this->y=rhs.y;
        this->z=rhs.z;
        return *this;
    }
    friend ostream& operator<<(ostream& os,const Point& p)
    {
        return os<<p.x<<" "<<p.y<<" "<<p.z;
    }
};

class Space
{
public:
    //p作为信使使用
    static Point& translate(Point p,int i)
    {
        p.x+=i;
        p.y+=i;
        p.z+=i;
        return p;
    }
};
int main()
{
    Point p1(3,4,5);
    cout<<p1<<endl;
    Point p2=Space::translate(p1,3);
    cout<<p2<<endl;

    return 0;
}

3,"奇特的递归模板模式"实现单件.
#include <iostream>
using namespace std;

template<class T>
class Singleton
{
    Singleton(const Singleton&);
    Singleton& operator=(const Singleton&);
protected:
    Singleton(){}
    virtual ~Singleton(){}
public:
    static T& instance()
    {
        static T s;
        return s;
    }
};

//注意这里诡异的派生
//Singleton<MyClass>之所以可以被编译器实例化,是因为它不依赖于类MyClass的大小.
//只是在Singleton<MyClass>::instance()第一次被调用时,才需要知道类MyClass的大小.
//此时,编译器已经知道MyClass的大小了.
class MyClass:public Singleton<MyClass>
{
    int i;
protected:
    //声明Singleton<MyClass>为友元
    friend class Singleton<MyClass>;
    //构造函数为私有或保护
    MyClass(){ i=43; }
public:
    void setVal(int x){ i=x; }
    int getVal(){ return i; }
};

int main()
{
    MyClass& m=MyClass::instance();
    cout<<m.getVal()<<endl;
    m.setVal(15);
    cout<<m.getVal()<<endl;
    return 0;
} 


4,延时实例化(5个文件)
知道第一次调用函数logfile时,才进行实例化.
logfile.h
#ifndef LOGFILE_H_INCLUDED
#define LOGFILE_H_INCLUDED
#include<fstream>

std::ofstream& logfile();

#endif // LOGFILE_H_INCLUDED


logfile.cpp
#include "logfile.h"

//必须不是内联的
std::ofstream& logfile()
{
    //这里是核心
    static std::ofstream log("log.txt");
    return log;
}

uselog1.h
#ifndef USELOG1_H_INCLUDED
#define USELOG1_H_INCLUDED
#include "logfile.h"

void f();

#endif // USELOG1_H_INCLUDED

uselog1.cpp
#include "uselog1.h"

void f()
{
    logfile()<<__FILE__<<std::endl;
}

main.cpp
#include "logfile.h"
#include "uselog1.h"
using namespace std;

void g()
{
    logfile()<<__FILE__<<endl;
}

int main()
{
    f();
    g();
    return 0;
}

分享到:
评论

相关推荐

    深入浅出设计模式之单件模式

    ### 深入浅出设计模式之单件模式 #### 一、单件模式概述 单件模式(Singleton Pattern)是软件设计模式中最为常见的一种,它的主要目标是确保某个类只有一个实例,并提供一个全局访问点。单件模式在很多情况下都...

    设计模式 之 单件模式

    单件模式(Singleton Pattern)是设计模式中的一种,它的核心意图是确保一个类只有一个实例,并提供一个全局访问点。在软件工程中,这样的设计模式能够有效地控制资源的使用,限制实例的数量,以及协调对象间的交互...

    [创建型模式] head first 设计模式之单件模式(Singleton)

    **单例模式(Singleton)**是软件设计模式中的一种创建型模式,它的核心思想是确保一个类只有一个实例,并提供一个全局访问点。这种模式在很多场景下非常有用,例如管理共享资源、配置对象或者数据库连接等。单例...

    设计模式 单件模式 设计模式 单件模式

    "设计模式-单件模式" 单件模式是指确保整个应用程序中只有一个类实例且这个实例所占资源在整个应用程序中是共享的程序设计方法。单件模式是一种非常实用的设计模式,它可以控制一个类的实例数量,使得调用者可以从...

    设计模式之单件模式、工厂模式、策略模式、观察者模式(php描述)(资料整理)

    本文将深入探讨四种常见的设计模式:单件模式(Singleton)、工厂模式(Factory)、策略模式(Strategy)和观察者模式(Observer),并以PHP语言为背景进行解释。 首先,我们来看单件模式。单件模式确保一个类只有...

    设计模式_--_工厂模式和单件模式

    ### 设计模式——工厂模式与单例模式 #### 一、引言 设计模式是软件工程领域中的一个重要概念,它代表了在特定情况下解决常见问题的最佳实践。在本篇文章中,我们将深入探讨两种广泛使用的软件设计模式:工厂模式...

    设计模式\单件模式VS2005

    单件模式(Singleton Pattern)是软件设计模式中的一种经典模式,它的主要目的是确保一个类只有一个实例,并提供一个全局访问点。这种模式在很多场景下非常有用,比如配置管理、线程池、数据库连接等需要全局唯一的...

    C#设计模式,单件模式,C#代码

    C#作为.NET框架的主要编程语言,广泛应用于各种复杂系统开发,其中单件模式(Singleton Pattern)是C#开发者经常会遇到的一种设计模式。本资源旨在帮助初学者理解并应用单件模式,通过关键代码实例,让你快速掌握这...

    JavaScript设计模式之单件模式介绍

    单件模式(Singleton Pattern)是一种常见的软件设计模式,它的核心思想是确保一个类只有一个实例,并提供一个全局访问点。在JavaScript中,虽然由于其动态特性和运行环境的原因,单件模式的应用不如Java或C#等...

    基于C#的设计模式中的单件模式

    单件模式(Singleton Pattern)是软件设计模式中的一种基础模式,它确保一个类只有一个实例,并提供一个全局访问点。在C#中,单例模式的实现有多种方式,包括懒汉式、饿汉式以及线程安全的实现。下面我们将详细讨论...

    opencv单件设计模式

    在编程中,设计模式是一种在特定情境下解决常见问题的标准化解决方案,其中“单件(Singleton)”设计模式是被广泛应用的一种。单件模式确保一个类只有一个实例,并提供一个全局访问点,这样在整个程序中可以统一...

    Head First 设计模式 (五) 单件模式(Singleton pattern) C++实现

    单件模式(Singleton pattern)是设计模式中的一种结构型模式,它的主要目的是确保一个类只有一个实例,并提供一个全局访问点。这种模式常用于系统中需要频繁创建和销毁的对象,如日志服务、线程池或者数据库连接等...

    面向对象设计模式:Singleton 单件(创建型模式)

    李建忠面向对象设计模式视频精讲:Singleton 单件(创建型模式)

    设计模式——单实例模式、单件模式——Java编写

    单实例模式是软件设计模式中的一种,它的核心思想是确保一个类在整个系统运行过程中只有一个实例存在,并提供一个全局访问点,以保证所有对该类对象的访问都指向这个唯一的实例。这种模式在Java中广泛应用于配置管理...

    C#面向对象设计模式纵横谈-1.Singleton 单件(创建型模式)

    在C#编程中,面向对象设计模式是一种组织代码和解决常见设计问题的模板。Singleton模式是一种创建型设计模式,它确保一个类只有一个实例,并提供一个全局访问点来获取这个唯一的实例。这种模式在需要控制资源的唯一...

    二十三种设计模式【PDF版】

    设计模式之 Singleton(单态/单件) 阎宏博士讲解:单例(Singleton)模式 保证一个类只有一个实例,并提供一个访问它的全局访问点 设计模式之 Factory(工厂方法和抽象工厂) 使用工厂模式就象使用 new 一样频繁. ...

    c++实现单件模式 c++实现单件模式 c++实现单件模式

    单件模式(Singleton Pattern)是设计模式中的一种,它的主要目的是确保一个类只有一个实例,并提供一个全局访问点。这种模式在软件开发中被广泛应用,比如配置管理、数据库连接池、日志服务等场景,需要确保全系统...

Global site tag (gtag.js) - Google Analytics