zoukankan      html  css  js  c++  java
  • 设计模式

    单例模式:一个类只能有一个对象

    我们都知道 创建对象有两种方法, 第一种是new  实例化  第二种是clone  克隆

    三私一公   私有的属性保存对象,私有构造函数 阻止实例化,私有克隆模式  阻止克隆对象,公有方法创建对象

    <?php
        /**
         * 
         * 作用:单例模式  一个类只能有一个对象
         * 应用场景:多数应用数据库的连接
         * 说明:
         * 1.因为只能有一个对象,需要私有化构造函数.
         * 2.构造函数私有化,说明类不能实例化,需要使用静态属性和方法
         */
        class DB{
    
            //静态属性
            private static $conne_link;
            //私有化构造函数
            private function __construct(){
                
            }
            //创建对象
            public static function newObj(){
                //判断静态属性保存是否是当前的对象,如果不是就创建并返回
                if(!self::$conne_link instanceof self){
                    return self::$conne_link=new self();
                }
                    return self::$conne_link;
            }
    
            private function __clone(){
                
            }
    
        }
    
        $link1=DB::newObj();
        $link2=DB::newObj();
    
        var_dump($link1,$link2);

    工厂模式:传递不同的参数,产出不同的对象

    <?php 
        /**
         * 作用:传递不同的参数,创建不同的对象
         * 说明:在gongchang类中,创建方法来创建对象
         */
        class gongChang{
    
            function create($obj=null){
                switch($obj){
                    case 1: 
                        return new huateng();
                        break;
                    case 2:
                        return new xiangshang();
                        break;
                    default :
                        return "空对象";
                }
            }
        }
        //类1
        class huaTeng{
    
        }
        //类2
        class xiangshang{
    
        }
    
        $obj= new gongChang();
        $str1=$obj->create(1);  //huateng对象
        $str2=$obj->create(2);  //xiangshang对象
        $str3=$obj->create();   //空对象
        var_dump($str1,$str2,$str3);
    <?php
    
        //fash 类
        class fash{
            function show(){
                echo '我会游';
            }
        }
        //fly类
        class fly{
            function show(){
                echo "我会飞";
            }
        }
    
    
        //策略类,根据出啊目的不同的对象,实现不同的方法
        class policy{
            public function pShow($obj){
                $obj->show();
            }
    }
    
    $a = new policy();
    
    //传递 fash类就调用fash类中的show方法
    $a->pShow(new fash());
    //传递 fly类 就调用fly类中的show方法
    $a->pshow(new fly());
  • 相关阅读:
    XML及XML的解析
    单例设计模式(Singleton)的优化
    Java反射初识
    TCP协议的简单应用一
    Java中实现线程同步的三种方法
    Java集合框架Map接口
    JDK1.8新特性之Stream类初识
    Java JDK1.8新特性之四大函数式接口
    tomcat 启动报 找不到 StrutsPrepareAndExecuteFilter。。
    easyjweb ejs 2014.2.25
  • 原文地址:https://www.cnblogs.com/xiaowie/p/14280946.html
Copyright © 2011-2022 走看看