设计模式
来源:互联网 发布:虚拟图片打印机软件 编辑:程序博客网 时间:2024/06/05 23:59
单例模式:保证一个类只有一个实例 如一个PC只能连一个鼠标
优点:1.避免对共享资源的多重占用
2.允许可变数目的实例
3.只有一个实例,可以节约系统资源
4.在单例模式中,活动的单例只有一个实例,对单例类的所有实例化得到的都是相同的一个实例。这样就 防止其它对象对自己的实例化,确保所有的对象都访问一个实例
缺点:
1.不适用于变化的对象,如果同一类型的对象总是要在不同的用例场景发生变化,单例就会引起数据的错误,不能保存彼此的状态。
2.由于单利模式中没有抽象层,因此单例类的扩展有很大的困难。(无法继承)
3.单例类的职责过重,在一定程度上违背了“单一职责原则”。
4.滥用单例将带来一些负面问题,如为了节省资源将数据库连接池对象设计为的单例类,可能会导致共享连接池对象的程序过多而出现连接池溢出;如果实例化的对象长时间不被利用,系统会认为是垃圾而被回收,这将导致对象状态的丢失。
懒汉: 不到万不得已就不会去实例化类,也就是说在第一次用到类实例的时候才会去实例化
饿汉:在单例类定义的时候就进行实例化,本来就是线程安全
Class A (饿汉)
{
private:
A(){}; //构造函数设置为私有,防止类外产生对象实例
static A*a;
public:
static A* getinstance() //静态成员函数属于类不属于对象
{
a=new A();
return a;
}
}
懒汉
class A
{
private:
A(){ pthread_mutex_init(&mux) };
static A*a=NULL;
public:
static pthread_mutex_t mux;
static A *getinstance()
{
if(a==NULL)
{
pthread_mutex_lock(&mux)
if(a==NULL)
a=new A();
pthread_mutex_unlock(&mux);
}
return a;
}
适配器模式:把一个类的接口转换成客户所希望的接口。
class T
{
public:
T(){};
virtual~T(){}; //定义为虚函数 在释放派生类对象时,首先调用派生类的析构函数,再调用基类的(如果不定义,基
virtual void request()=0; //类的析构函数得不到调用)
}
class Adapter:public T
{
public:
Adapter(){};
~Adapter(){};
void request()
{
a->kehu();
}
private:
Y a;
}
class Y
{
public:
Y(){};
~Y(){};
void kehu();
}
int main()
{
T *t=new Adapter();
t->request();
return 0;
}
- 设计模式
- 设计模式
- 设计模式
- 设计模式
- 设计模式
- 设计模式
- 设计模式~~~~~~~~~~
- 设计模式
- 设计模式
- 设计模式
- 设计模式
- 设计模式
- 设计模式
- 设计模式
- 设计模式
- 设计模式
- 设计模式
- 设计模式
- jkh
- TOYS POJ
- 防止误删文件!将rm命令改造成mv命令简易版
- 选择排序
- hibernate映射集合属性(属性内非持久化类)
- 设计模式
- Java 2.1 java基本类型的转换和运算符
- Memcached深入了解
- Hadoop系列--Hadoop自带程序wordcount运行示例
- XYNUOJ 问题 D: Largest Rectangle in a Histogram
- 初级面向对象
- 数据结构——二叉树的构建与遍历
- Xshell远程连接工具相关设置技巧
- Java 3.0 java流程控制之分支语句