当前位置: 首页 > news >正文

揭阳模板建站开发公司/平台广告推广

揭阳模板建站开发公司,平台广告推广,企业网站建设 调研,申请的网站怎么建设1.应用场景 应用于编码, 高可扩展程序的编码设计实现,以及用于面试。 2.学习/操作 文档 接口类和抽象类以及设计模式,PHP-面向对象教程-慕课网 接口编程 - 学习/实践_william_n的博客-CSDN博客 设计模式之美_设计模式_代码重构-极客时间 PHP 设计模式系…

1.应用场景

应用于编码, 高可扩展程序的编码设计实现,以及用于面试。

2.学习/操作

文档

接口类和抽象类以及设计模式,PHP-面向对象教程-慕课网

接口编程 - 学习/实践_william_n的博客-CSDN博客

设计模式之美_设计模式_代码重构-极客时间

PHP 设计模式系列 | Laravel 学院

https://medium.com/frontend-canteen/useful-design-patterns-48ac739882a4 -- JS,常用的三种设计模式

设计模式有23种 [有言25种]

设计模式与编程语言无关,设计模式本质是一种经验总结,'最佳'实践 [个人认为没有‘最’,只有‘更’]

表现语言:  PHP 

个人主编程语言为PHP [过不去的梗儿:PHP是世界上最好的语言]

这里只介绍 单例模式 与 工厂模式

1. 单例模式

简单说

就是对象只是实例化一次.

优点

节省内存[更直白点,节省钱]

一、实例控制

单例模式会阻止其他对象实例化其自己的单例对象的副本,从而确保所有对象都访问唯一实例。

二、灵活性

因为类控制了实例化过程,所以类可以灵活更改实例化过程。

缺点

一、开销

虽然数量很少,但如果每次对象请求引用时都要检查是否存在类的实例,将仍然需要一些开销。可以通过使用静态初始化解决此问题。

二、可能的开发混淆

使用单例对象(尤其在类库中定义的对象)时,开发人员必须记住自己不能使用new关键字实例化对象。因为可能无法访问库源代码,因此应用程序开发人员可能会意外发现自己无法直接实例化此类。

三、对象生存期

不能解决删除单个对象的问题。在提供内存管理的语言中(例如基于.NET Framework的语言),只有单例类能够导致实例被取消分配,因为它包含对该实例的私有引用。

引出话题↓

在一个php文件中,某类实例化了若干次,而且又被其他文件include/require很多次,想想会产生多少相同的对象呢?!

test.php

<?php

// 定义一个空类
class Test
{
    // code here
}

$test1 = new Test();
$test2 = new Test();
$test3 = new Test();
$test4 = new Test();

var_dump($test1);
var_dump($test2);
var_dump($test3);
var_dump($test4);

输出打印:下面的红色数字是对象实例ID --- 这个是非常有用的,可以帮助我们确认对象是否为同一个对象

object(Test)#1 (0) { }

object(Test)#2 (0) { }

object(Test)#3 (0) { }

object(Test)#4 (0) { }

由此可看到是实例化产生了四个对象

现将code做如下改变:

[单例模式]

singleton.php

<?php

class Singleton
{
    private static $_instance = null;

    // 构造方法私有化, 则类无法在实例化, 即无法直接new
    private function __construct()
    {
        // Code here
    }

    // 为了严谨, 使用__clone魔术方法, 并私有化, 即 类不能通过复制clone产生对象
    private function __clone()
    {
        // Code here
    }

    // 定义一个在类外能够实例化类的方法, 一定要是public访问修饰符
    public static function getInstance()
    {
        if (!(self::$_instance instanceof self)) self::$_instance = new self();
        return self::$_instance;

    }
}

$singleton1 = Singleton::getInstance();
$singleton2 = Singleton::getInstance();
$singleton3 = Singleton::getInstance();
$singleton4 = Singleton::getInstance();

var_dump($singleton1);
var_dump($singleton2);
var_dump($singleton3);
var_dump($singleton4);

打印结果如下:

object(Singleton)#1 (0) { }

object(Singleton)#1 (0) { }

object(Singleton)#1 (0) { }

object(Singleton)#1 (0) { }

可以看到实例化只产生了一个对象

Code 参见:

learning_of_php/高级编程/设计模式/创建型/单例模式 at master · ningxiaofa/learning_of_php · GitHub

总结

这就是单例模式 , 框架中常使用, 有时候不理解, 但不是最重要的点, 首先会使用更重要,

而且有时用的过程突然可能就明白了, 建议自己默写两遍, 并且想着在工作中应用.

2. 工厂模式

用途:主要是负责用来创建[同样功能的]类的实例【对比思考跟单例模式的区别

比如:项目需要一个缓存类【有些数据要放在缓存里面】

常用的缓存有: Memcached, Redis等。

现在简单封装一个Memcacehed操作类, 只是具有少量的方法

Memcached.php

<?php

class Memcached
{
    public  function set($key, $value)
    {
        // Code here
    }

    public function get($key)
    {
        // Code here
    }

    public function delete($key)
    {
       // Code here
    }

}

然后我们要很多地方操作我们的缓存的时候, 就需要 new Memcached 这个类

$cache = new Memcached(); // 调用处1

$cache = new Memcached(); // 调用处2,调用处3 ....

但是正如上面所说, 会在很多地方调用, 就会散落在项目代码的很多地方, 有一天老板说, 诶, 这个Memcached感觉不够用了, 现在要换成Redis, 那这时候就糟糕了, 替换得翻多少代码去修改呢 [工作量可能不小, 而且还不能完全保证修改完毕, 一个不剩]

 
上面的代码要全部改成:

Memcached 的类要改成 Redis, 而且调用的地方也要改成 Redis

$cache = new Redis(); // 调用处1

$cache = new Redis(); // 调用处2, 调用处3 ....

有没有解决办法?

有,使用工厂模式, 定义一个Cache类 ,【个人看来】是为了更好的维护代码, 或者说可扩展性,减轻开发者的麻烦,有时候常常是减轻自己的麻烦 ----- 当学习了很多的设计模式之后,你会发现设计模式的本质用处都是为了使得代码易扩展,易维护,其他没什么作用

Cache.php

<?php

class Cache
{
    public static function factory()
    {
        return new Memcached();

        // 如果由于项目变化, 要使用Redis, 则只需要改变这一个地方就可以了, 如下:
        // return new Redis(); // 使用Redis
    }
}

demo.php

$cache  = Cache::factory();
$cache->set('hello', 'world');
$cache->get('hello');
$cache->delete('hello');

上面还有一个优化↓

首先定义一个接口Cache, Cache类实现该接口,

接口主要用来约束, 接口/类的方法, 适用于团队/代码规模较大

完整代码:共计三[也可以两]个文件[具体实现类文件,接口定义文件,工厂类]

Code参见: 

learning_of_php/高级编程/设计模式/创建型/工厂模式/简单工厂模式 at master · ningxiaofa/learning_of_php · GitHub

Memcached.php

<?php

// 具体的实现类

class Memcached implements CacheInterface
{
    public  function set($key, $value)
    {
        // ...
        echo 'set...';
    }

    public function get($key)
    {
        // ...
        echo 'get...';
    }

    public function delete($key)
    {
        // ...
        echo 'delete...';
    }

}

// 定义接口
interface CacheInterface 
{

    public function set($key, $value);

    public function get($key);

    public function delete($key);
}

// 抽象工厂类
class Cache
{
    public static function factory()
    {

        // 使用Memcached
        return  new Memcached();

        // 使用Redis
        // return  new Redis();
    }
}

$cache  = Cache::factory();
$cache->set('hello', world');
$cache->get('hello');
$cache->delete('hello'); 

另附上极客时间专栏 <<设计模式之美>> 的大纲

原图↓

https://static001.geekbang.org/resource/image/f3/d3/f3262ef8152517d3b11bfc3f2d2b12d3.png

3. 更多设计模式系列 

PHP 设计模式系列 | Laravel 学院  // 学院君 - PHP 设计模式系列 - 20191126 - 推荐

后续补充

...

3.问题/补充

1. 设计模式有多少种? 常用的有哪些? 

暂时可认为23种,具体数字其实没那么重要,因为很难全用到,而且用到的时候再详看即可

常用的有:// 个人看法,具体还需要再实践学习验证

单例模式,

工厂模式[简单工程模式/抽象工程模式/静态工厂模式],
观察者模式,

...

2. 设计模式虽然与编程语言无关, 但是涉及到具体编程语言, 实现起来又是不同的,

因为这是编程语言之间的区别决定的.

4.参考

参见文档阅读列表

后续补充

...

http://www.lbrq.cn/news/803719.html

相关文章:

  • wordpress 淘客主题/北京网络seo推广公司
  • 网站建设公司简介模板下载/郑州seo优化外包顾问
  • 企业营销型网站有特点/一站式网站建设公司
  • 建手机网站怎么收费/2345网址导航电脑版官网
  • 一个网站的建设流程有哪些资料/7月新闻大事件30条
  • 天津外贸网站建设/谷歌优化方法
  • 网站锚文本怎么做/今日头条国际军事新闻
  • 一般通过人体的电流超过多大/seo优化排名是什么
  • 凡科的网站做seo比较难/百度搜索指数排行
  • 南京高端网站建设公司哪家好/建设网站制作公司
  • 哪里做网站做的好/企业推广方式有哪些
  • 个人网站怎么做联盟推广/广州seo快速排名
  • 十大电商代运营服务商/windows优化软件
  • 武汉网页设计公司/seo是什么的
  • 公司建设网站算入什么会计科目/重庆今日头条新闻消息
  • 制作网站建设的公司/云搜索
  • wordpress 留言板插件/公众号seo排名
  • wordpress仿站模板制作教程/南京seo公司
  • 网站运营设计/优秀营销软文范例100字
  • wordpress orchidv 插件/seo与sem的区别与联系
  • 领星erp系统/seo搜索排名优化是什么意思
  • wordpress 调用浏览数/四川seo推广
  • 百姓网招聘/seo对网店推广的作用有哪些
  • vs2012网站开发课程设计/seo的培训班
  • 厦门外贸企业网站建设/代做百度首页排名
  • 做方案还找不到素材 这里有最全的设计网站/下载百度app免费下载安装
  • 银川市网站建设/企业网站设计与实现论文
  • 四川建设网网站/企业网站优化关键词
  • 网站怎么做不违法/上海seo推广
  • 屏蔽某网站怎么做/怎么做业务推广技巧
  • React ahooks——副作用类hooks之useThrottleEffect
  • Allegro降版本工具
  • Oracle 11g RAC集群部署手册(二)
  • 从内部保护你的网络
  • 超越 ChatGPT:智能体崛起,开启全自主 AI 时代
  • 新一代PLC控制软件平台EsDA-AWStudio