什么是设计模式

什么是设计模式 设计模式是一套被反复使用、容易被他人理解的、可靠的代码设计经验的总结。 那么我们常说的架构、框架和设计模式有什么关系呢? 架构是一套体系结构,是项目的整体解决方案; 框架是可供复用的半成品软件,是具体程序代码。 架构一般会涉及到采用什么样的框架来加速和优化某部分问题的解决,而好的框架代码里合理使用了很多设计模式。 比如:laravel框架中就使用到了很多的设计模式。其中包括单例模式,门面模式,注册树模式(DI/IOC),适配器模式,观察者模式等多种设计模式。 设计模式的目的是为了更好的代码重用性,可读性,可靠性,可维护性。 设计模式的作用 设计模式能解决: 替换杂乱无章的代码,形成良好的代码风格 代码易读,工程师们都能很容易理解 增加新功能时不用修改接口,可扩展性强 稳定性好,一般不会出现未知的问题 设计模式不能解决: 设计模式是用来组织你的代码的模板,而不是直接调用的库 设计模式并非最高效,但是代码的可读性和可维护性更重要 不要一味追求并套用设计模式,重构时多考虑 设计模式–六大原则 单一职责原则 定义 不要存在多于一个导致类变更的原因。既一个类只负责一项职责。 场景 类T负责两个不同的职责;职责P1,职责P2,当由于职责P1需求发生改变而需要修改类T时,有可能会导致原本运行正常的职责P2功能发生故障。 <?php class Animal { public function bre($animal) { echo $animal."呼吸空气"; } } class Program { public function main() { $animal = new Animal(); $animal->bre('猫'); $animal->bre('狗'); $animal->bre('鱼'); } } 修正 遵循单一职责原则。分别建立两个类T1、T2,使T1完成职责P1功能,T2完成职责P2功能。这样,当修改类T1时,不会使职责P2发生故障风险;同理,当修改T2时,也不会使职责P1发生故障风险。 <?php class Ter { public function bre($animal) { echo $animal."呼吸空气"; } } class Aqu { public function bre($animal) { echo $animal....

March 21, 2022 · 4 min · ZhaoGuibin

树莓派格式化硬盘并自动挂载

输入 fdisk -l查看你U盘的具体分区 fdisk -l 先取消树莓派自动挂载取消挂载 sudo umount /dev/sdb1 将/dev/sdb1分区格式化成ext4文件系统 sudo mkfs.ext4 /dev/sdb1 挂载硬盘 sudo mount /dev/sdb1 /data/hardDisk/linkEase/musics 开机自动挂载硬盘 查看硬盘UUID ls -l /dev/disk/by-uuid/ 通过UUID挂载硬盘 #编辑/etc/fstab sudo vim /etc/fstab #添加以下命令到/etc/fstab UUID=601788b2-96aa-4975-a6c2-7b90b128a7e5 /data/hardDisk/linkEase/musics ext4 defaults 0 0

February 3, 2021 · 1 min · ZhaoGuibin

RSA数据加密解密

RSA数据加密解密 <?php //定义常量 define("INVOICE_PRINT_URL", ''); define("MERCHANT_ID", ''); define("MERCHANT_SECRET", ''); define("PLATFORM_PUBLIC_KEY", ''); define("MERCHANT_PUBLIC_KEY", ''); define("MERCHANT_PRIVATE_KEY", $''); define("ACCOUNT_VALUE", ''); const KEYSIZE = 2048;//密钥长度 <?php /** * @FuncName:getPlatformPublicKey * @Description 获取平台公钥 * @User ZHaoGuiBin * @Date 2020-08-17 8:29 * @return false|resource */ private static function getPlatformPublicKey() { return openssl_pkey_get_public(PLATFORM_PUBLIC_KEY); } /** * @FuncName:getMerchantPrivateKey * @Description 获取商户私钥 * @User ZHaoGuiBin * @Date 2020-08-17 8:29 * @return false|resource */ private static function getMerchantPrivateKey() { return openssl_pkey_get_private(MERCHANT_PRIVATE_KEY); } /** * @FuncName:getMerchantPublicKey * @Description 获取商户公钥 * @User ZHaoGuiBin * @Date 2020-08-17 8:29 * @return false|resource */ private static function getMerchantPublicKey() { return openssl_pkey_get_public(MERCHANT_PUBLIC_KEY); } /** * @FuncName:sslPublicEncrypt * @Description 公钥加密数据 * @User ZHaoGuiBin * @Date 2020-08-14 10:42 * @param $source_data * @return array */ private static function sslPublicEncrypt($source_data) { if (!...

August 22, 2020 · 2 min · ZhaoGuibin

多维数组拼接成字符串

多维数组拼接成字符串 /** * @FuncName:arrayToString * @Description 数组拼接成字符串 * @User ZHaoGuiBin * @Date 2020-08-14 9:17 * @param $data * @param string $keys * @param string $key_1 //多维数组主key * @param string $string * @return string */ private static function arrayToString($data, $keys = '', $string = '', $key_1 = '') { $temp = 0; foreach ($data as $key => $value) { if (is_array($value)) { if (!is_numeric($key)) { $key_1 = $key; $string .= $key_1 ....

August 22, 2020 · 1 min · ZhaoGuibin

数组按照alphabet序排序

数组key按照alphabet序排序 /** * @FuncName:arraySoft * @Description 数组key按照alphabet序排序 * @User ZHaoGuiBin * @Date 2020-08-13 15:45 * @param $data * @return mixed */ private static function arraySoft($data) { ksort($data); foreach ($data as $key => $value) { if (is_array($value)) { $data[$key] = self::arraySoft($value); } } return $data; }

August 22, 2020 · 1 min · ZhaoGuibin

surge脚本-【DSU】每日签到

surge签到脚本 代码github地址 https://raw.githubusercontent.com/zhaoguibin/surge/master/script/RNB_daily_bonus.js /************************* [Script] mixrnb签到.js = type=cron,cronexp=35 8 * * *,wake-system=1,timeout=20,script-path=https://raw.githubusercontent.com/zhaoguibin/surge/master/script/RNB_daily_bonus.js 获取mixrnb的cookie = type=http-request,pattern=http:\/\/www.mixrnb.com\/plugin\.php\?id=dsu_paulsign:sign,tag=获取mixrnb的cookie,script-path=https://raw.githubusercontent.com/zhaoguibin/surge/master/script/RNB_daily_bonus.js,script-update-interval=0 签到页面获取到cookie,http://www.mixrnb.com/plugin.php?id=dsu_paulsign:sign *************************/ var error, response, body; var set_cookies = new Array(); const isRequest = typeof $request != "undefined" if (isRequest) { $cookie = $request.headers.Cookie; const saltkey_regex = /(R5nb_c8f5_saltkey=\S*)/gm; const auth_regex = /(R5nb_c8f5_auth=(\S*));/gm; const R5nb_c8f5_saltkey = saltkey_regex.exec($cookie); const R5nb_c8f5_auth = auth_regex.exec($cookie); if (!R5nb_c8f5_saltkey) { $notification.post('', '', '获取R5nb_c8f5_saltkey失败'); $done(); } if (!R5nb_c8f5_auth) { $notification.post('', '', '获取R5nb_c8f5_auth失败'); $done(); } $persistentStore....

August 4, 2020 · 2 min · ZhaoGuibin

php使用Linux命令导出MySQL数据到csv

PS :使用这个导出功能需要的条件: 1–服务器需要安装mysql客户端:yum install mysql 2–php需要开启exec函数(disable_functions exec) /** * @FILE_NAME:ExcelExport.php * @Description 数据导出excel,从数据库导出再下载,数据库配置 * [mysqld] * secure_file_priv= '' * @User ZHaoGuiBin * @Date 2019-12-04 13:52:58 */ class ExcelExport { /** * @FuncName:exportExcel * @Description * @User ZHaoGuiBin * @Date 2019-12-24 13:42:11 * @param string $title * @param $sql * @param $data * @return bool */ public static function exportExcel($title = '报表导出', $sql, $data) { $data_dir = getcwd() . "/data_export/"; //去除sql语句里的`,要不然执行shell命令报错 $sql = str_replace('`', '', $sql); $sql = str_replace('"', "'", $sql); //删除历史表格 self::deleteExcel(); if (!...

January 19, 2020 · 3 min · ZhaoGuibin

MySQL_OUTFILE导出数据

PS : mysql 需要开启grant FILE on . to newerp; 权限 /** * @FILE_NAME:ExcelExport.php * @Description 数据导出excel,从数据库导出再下载,数据库配置 * [mysqld] * secure_file_priv= '' * @User ZHaoGuiBin * @Date 2019-12-04 13:52:58 */ class ExcelExport { /** * @FuncName:exportExcel * @Description * @User ZHaoGuiBin * @Date 2019-12-24 13:42:11 * @param string $title * @param $sql * @param $data * @return bool */ public static function exportExcel($title = '报表导出', $sql, $data) { $data_dir = getcwd() ....

January 19, 2020 · 3 min · ZhaoGuibin

PHP导出数据报表

/** * @FILE_NAME:ExcelExport.php * @Description csv导出数据 * @User ZHaoGuiBin * @Date 2019-12-04 13:52:58 */ class ExcelExport { /** * @FuncName:sqlQuery * @Description 生成器模式返回数据 * @User ZHaoGuiBin * @Date 2020-01-08 16:43 * @param $sql * @return Generator */ public static function sqlQuery($sql) { $sys = new SysModel(); $db = $sys->getAdapter(); foreach ($db->fetchAll($sql) as $key => $val) { yield $val; //生成器返回数据,避免内存溢出 } } /** * @FuncName:exportExcel * @Description * @User ZHaoGuiBin * @Date 2020-01-09 09:23 * @param string $title * @param string $sql * @param array $data example : ["单号" => 'order_key'],['报表title名称'=>'mysql语句字段名'] * @return bool */ public static function exportExcel($title = '报表导出', $sql = '', $data = []) { $data_dir = getcwd() ....

January 19, 2020 · 3 min · ZhaoGuibin

virtualbox安装增强功能报错

在virtualbox安装目录找到VBoxGuestAdditions.iso复制到虚拟机里面,可以放到任意一个目录 sudo mkdir /media/GuestAdditionsISO sudo mount -o loop VBoxGuestAdditions.iso所在目录/VBoxGuestAdditions.iso /media/GuestAdditionsISO 这时候你会看到一条信息,the ISO has been mounted as READ-ONLY cd /media/GuestAdditionsISO ./VBoxLinuxAdditions.run 搞定 愿答案

March 2, 2019 · 1 min · ZhaoGuibin