设计模式-单例模式

什么是设计模式?

设计模式(Design pattern)是一套被反复使用、多数人知晓的、是代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。
设计模式的目标之一就是提高程序的可复用性。考虑的是怎样才能将程序作为“组件”复用。

设计模式的六大原则是什么?

开闭原则(Open Close Principle):对扩展开放,对修改关闭

里氏替换原则(Liskov Substitution Principle):子类可以扩展父类的功能,但不能改变父类原有的功能

依赖倒转原则(Dependence Inversion Principle):高层模块不应该依赖低层模块,二者都应该依赖其抽象;抽象不应该依赖细节;细节应该依赖抽象,核心思想是面向接口编程

接口隔离原则(Interface Segregation Principle):客户端不应该依赖它不需要的接口;一个类对另一个类的依赖应该建立在最小的接口上。

迪米特法则(最少知道原则)(Demeter Principle):一个对象应该对其他对象保持最少的了解

单一职责原则( Single responsibility principle ):不要存在多于一个导致类变更的原因。通俗的说,即一个类只负责一项职责。

设计模式的分类?

创建型设计模式:
对类的实例化过程进行了抽象,能够将软件模块中对象的创建和对象的使用分离。
工厂方法模式(Factory Method)
抽象工厂模式(Abstract Factory)
创建者模式(Builder)
原型模式(Prototype)
单例模式(Singleton)

结构型模式:
描述如何将类或者对 象结合在一起形成更大的结构,就像搭积木,可以通过 简单积木的组合形成复杂的、功能更为强大的结构。
外观模式/门面模式(Facade门面模式)
适配器模式(Adapter)
代理模式(Proxy)
装饰模式(Decorator)
桥梁模式/桥接模式(Bridge)
组合模式(Composite)
享元模式(Flyweight)

行为型设计模式:
是对在不同的对象之间划分责任和算法的抽象化。
行为型模式不仅仅关注类和对象的结构,而且重点关注它们之间的相互作用
模板方法模式(Template Method)
观察者模式(Observer)
状态模式(State)
策略模式(Strategy)
职责链模式(Chain of Responsibility)
命令模式(Command)
访问者模式(Visitor)
调停者模式(Mediator)
备忘录模式(Memento)
迭代器模式(Iterator)
解释器模式(Interpreter)

什么是单例模式?

单例模式:是一种常用的软件设计模式,在它的核心结构中值包含一个被称为单例的特殊类。一个类只有一个实例,即一个类只有一个对象实例。将默认的构造函数声明为私有的。
单例模式可以分为懒汉式和饿汉式:
    懒汉式单例模式:在类加载时不初始化。在instance中new instance然后返回。
    饿汉式单例模式:在类加载时就完成了初始化,所以类加载比较慢,但获取对象的速度快。在静态区初始化instance,然后通过instance返回。

懒汉式单线程不安全:在类加载时不初始化

class Singleton
{
public:
    static Singleton* instance()
    {
        if(_instance==NULL)
        {
            _instance=new Singleton;()
        }
        return _instance;
    }

private:
    Singleton()
    {
        cout<<"Singleton..."<<endl;
    }
    static Singleton* _instance=NULL;
    Singleton(const Singleton& src);
    Singleton operator=(const Singleton& src);

}

饿汉模式 单线程安全:在类加载时已经初始化

Singleton* Singleton::instance ()
{   
    return _instance;
}
Singleton::Singleton()
{
    cout<<Singleton...<<endl;
}
Singleton* Singleton::_instance=new Singleton();

懒汉模式 多线程中加锁:

Singleton::Singleton()
{
    cout<<Singleton...<<endl;
}
Singleton* Singleton::_instance=NULL;

Singleton* Singleton::instance ()
{   
    lock();
    if(_instance==NULL)
    {
        _instance=new Singleton();
    }
    unlock();
    return instance;

}

懒汉模式 双重锁定:为解决加锁每次判断是否为空都需要被锁定,很多线程,就会造成大量线程的阻塞。

Singleton::Singleton()
{
    cout<<Singleton...<<endl;
}
Singleton* Singleton::_instance=NULL;

Singleton* Singleton::instance ()
{   

    if(_instance==NULL)
    {
        lock();
        if(_instance==NULL)
        {
            _instance=new Singleton();
        }
        unlock();
    }

    return instance;

}

优点:
1.减少了时间和空间的开销
2.提高了封装性,使得外部不易改动实例

缺点
1.懒汉式是以时间换空间的方式。
2.饿汉式是以空间换时间的方式。

资源下载链接为: https://pan.quark.cn/s/9e7ef05254f8 在网页设计中,为图片添加文字是一种常见的需求,用于增强视觉效果或传达更多信息。本文将介绍两种常用的方法:一种是将图片设置为背景并添加文字;另一种是利用<span>标签结合CSS定位来实现。 这种方法通过CSS实现,将图片设置为一个容器(通常是<div>)的背景,然后在容器中添加文字。具体步骤如下: 创建一个包含文字的<div>元素: 使用CSS设置<div>的背景图片,并调整其尺寸以匹配图片大小: 如有需要,可使用background-position属性调整图片位置,确保文字显示在合适位置。这样,文字就会显示在图片之上。 另一种方法是将文字放在<span>标签内,并通过CSS绝对定位将其放置在图片上。步骤如下: 创建一个包含图片和<span>标签的<div>: 设置<div>为相对定位,以便内部元素可以相对于它进行绝对定位: 设置<span>为绝对定位,并通过调整top和left属性来确定文字在图片上的位置: 这种方法的优点是可以精确控制文字的位置,并且可以灵活调整文字的样式,如颜色和字体大小。 两种方法各有优势,可根据实际需求选择。在实际开发中,还可以结合JavaScript或jQuery动态添加文字,实现更复杂的交互效果。通过合理运用HTML和CSS,我们可以在图片上添加文字,创造出更具吸引力的视觉效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值