java 单例模式区别_在java跟php中,单例模式的区别

在java和php中,单例模式的区别

在java和php中都会用到很多的单例模式,那么它们有什么区别呢?昨天晚上我相互对比了一下,就做了个小小的总结,然后写了个很小的java单例和php单例

一、java 单例

//完成对用户登录的简单验证操作class User{private String name=null;//用户名private String passwd=null;//密码private static User ins = new User("这里可以传入常量,如“chunge”,此时构造函数要有对应形参。但是不支持在静态初始化函数中对它进行外部传递赋值");//单例实例对象//初始化用户名密码的代码块{this.name="chunge";this.passwd="111111";}//私有构造函数private User(String n){this.name=n;}//获取单例对象public static User getIns(){return ins;}//判断用户信息是否正确public void checkUserInfo(String name , String passwd ){if(name==this.name && passwd==this.passwd){System.out.println("欢迎您" + this.name);System.exit(1);}//用户密码不匹配System.out.println("非法登录");System.exit(1);}};public class oop{public static void main(String args[]){User U = User.getIns();//实例化对象U.checkUserInfo("chunge","111111");}};

二、php单例

config_file=ROOT."config/global_config.php";//赋值$this->WEB_CONFIG=$WEB_CONFIG;}//禁用克隆函数private function __clone(){return false;}//单例模式public static function getIns(){if(!(self::$ins instanceof self)){//如果不存在self::$ins=new self();}return self::$ins;}动态输出配置信息public function configGet($key){if(array_key_exists($key,$this->WEB_CONFIG)){return $this->WEB_CONFIG[$key];}else{echo "该配置信息不存在";}}//动态添加配置信息传入键即可public function configSet($key,$value){//真正存入$str=file_get_contents($this->config_file);//var_dump($str);$tmp=$this->configGet($key); $str=str_replace($tmp,$value,$str);file_put_contents($this->config_file,$str);//file_put_contents("ROOT1.php",$str);}动态输出配置信息public function __get($key){if(array_key_exists($key,$this->WEB_CONFIG)){return $this->WEB_CONFIG[$key];}else{echo "该配置信息不存在";}}//动态添加配置信息public function __set($key,$value){//只是暂时的配置,未真正存入$this->WEB_CONFIG[$key]=$value;}}?>

总结:

/**笔记:类名字User 单例变量ins 在java和php中,单例模式的区别1.类可以进行单例模式,和php一样2.java的单例模式变量声明:private/public static 类名字 对象名字 = new 类名字();例如:private static User ins = new User();//已经进行了new操作 php的单例模式变量声明:public/private static 对象名字=null;//只是声明,未进行new操作例如:public static $ins = null;3.java获得该单例对象方法 public static 类名字 方法名字(){return 刚刚定义的对象名字}例如: public static User getIns(){return ins;//注意这里无法用this.但在php中,可以用self::获取} php中获取该单例对象方法public function getIns(){if(self::$ins==null || (!self::$ins instanceof self)){self::$ins=new self();}return self::$ins;} 4.在java中,单例模式如果初始化类中某些变量,因为其getIns()方法是静态的,如果变量不为静态的,则无法实例化该变量。即使构造函数需要传参,个人觉得可以直接用代码块 进行初始值的设置 在php中,单例模式可以对起进行初始值的赋值,如public function getIns($can1,$can2.......){if(self::$ins==null || (!self::$ins instanceof self)){self::$ins=new self($can1,$can2........);//.......代表不限个数}return self::$ins;}这是只需要类的构造函数传入对应个数的参数即可。**/

相关文章

相关视频

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值