前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >设计模式 | 单例模式

设计模式 | 单例模式

作者头像
憧憬博客
发布2020-07-21 13:22:10
3620
发布2020-07-21 13:22:10
举报
文章被收录于专栏:憧憬博客分享憧憬博客分享

首先说明一下, 设计模式不局限于语言之间, 思想一致, 都是为了更好的解决软件设计中的问题, 博主这里使用PHP做示例, 其他语言中如果设计方式有不一样的会进行说明的。

说明

单例模式是设计模式中非常常用的一种设计方案, 顾名思义就是只有一个实例。单例模式确保某一个类只有一个实例,不能重复实例,只能它自己实例化,而且向整个系统提供这个实例。 一个类只被实例化一次,当其他人对其再次实例化时,返回第一次实例化的对象,可以避免大量的new操作,减少资源的消耗,典型应用于数据库类的实例化。

一般就是三私一公

  • 构造函数私有化
  • 克隆函数私有化
  • 私有存放实例的成员属性
  • 公有获取实例的函数 并且设为静态方法

示例

代码语言:javascript
复制
<?php
/**
 * Created by 憧憬.
 */

class Singleton
{
    //私有属性,用于保存实例
    private static $instance;

    //构造方法私有化,防止外部创建实例
    private function __construct(){}

    //公有属性,用于测试
    public $name;

    /**
     * 公有方法,用于获取实例
     * @return Singleton
     * @author: 憧憬
     */
    public static function getInstance(){

        //判断实例有无创建,没有的话创建实例并返回,有的话直接返回
        if(!(self::$instance instanceof self)){
            self::$instance = new self();
        }

        return self::$instance;
    }

    //克隆方法私有化,防止复制实例
    private function __clone(){}
}

$instance = Singleton::getInstance();

$instance->name = '这是实例化的第一个对象, 然后给他设置属性值';

$newInstance = Singleton::getInstance();

$newInstance->name = '新对象进行修改';

echo $newInstance->name; // 新对象进行修改

echo $instance->name; // 新对象进行修改

java童鞋注意

java是多线程, 以上例子在java设计里面是非线程安全的, 可以为根据业务, 使用频率上不同锁, 具体请百度, 这里不做多赘述, 重点在于思想。

本文为作者原创,手码不易,允许转载,转载后请以链接形式说明文章出处。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 说明
  • 示例
  • java童鞋注意
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档