工厂方法模式介绍
亦称: 事件订阅者、监听者、Event-Subscriber、Listener、Observer
意图观察者模式是一种行为设计模式, 允许你定义一种订阅机制, 可在对象事件发生时通知多个 “观察” 该对象的其他对象。
问题假如你有两种类型的对象: 顾客和 商店 。 顾客对某个特定品牌的产品非常感兴趣 (例如最新型号的 iPhone 手机), 而该产品很快将会在商店里出售。
顾客可以每天来商店看看产品是否到货。 但如果商品尚未到货时, 绝大多数来到商店的顾客都会空手而归。
前往商店和发送垃圾邮件
另一方面, 每次新产品到货时, 商店可以向所有顾客发送邮件 (可能会被视为垃圾邮件)。 这样, 部分顾客就无需反复前往商店了, 但也可能会惹恼对新产品没有兴趣的其他顾客。
我们似乎遇到了一个矛盾: 要么让顾客浪费时间检查产品是否到货, 要么让商店浪费资源去通知没有需求的顾客。
解决方案拥有一些值得关注的状态的对象通常被称为目标, 由于它要将自身的状态改变通知给其他对象, 我们也将其称为发布者 (publisher)。 所有希望关注发布者状态变化的其他对象被称为订阅者 (subscribe ...
观察者模式介绍
亦称: 事件订阅者、监听者、Event-Subscriber、Listener、Observer
意图观察者模式是一种行为设计模式, 允许你定义一种订阅机制, 可在对象事件发生时通知多个 “观察” 该对象的其他对象。
问题假如你有两种类型的对象: 顾客和 商店 。 顾客对某个特定品牌的产品非常感兴趣 (例如最新型号的 iPhone 手机), 而该产品很快将会在商店里出售。
顾客可以每天来商店看看产品是否到货。 但如果商品尚未到货时, 绝大多数来到商店的顾客都会空手而归。
前往商店和发送垃圾邮件
另一方面, 每次新产品到货时, 商店可以向所有顾客发送邮件 (可能会被视为垃圾邮件)。 这样, 部分顾客就无需反复前往商店了, 但也可能会惹恼对新产品没有兴趣的其他顾客。
我们似乎遇到了一个矛盾: 要么让顾客浪费时间检查产品是否到货, 要么让商店浪费资源去通知没有需求的顾客。
解决方案拥有一些值得关注的状态的对象通常被称为目标, 由于它要将自身的状态改变通知给其他对象, 我们也将其称为发布者 (publisher)。 所有希望关注发布者状态变化的其他对象被称为订阅者 (subscribe ...
PHP 观察者模式应用场景实例详解
代码123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119<?phpheader("Content-type: text/html; charset=utf-8");/** * 观察者模式应用场景实例 * * 免责声明:本文只是以哈票网举例,示例中并未涉及哈票网任何业务代码,全部原创,如有雷同,纯属巧合。 * * 场景描述: * 哈票以购票为核心业务(此模式不限于该业务),但围绕购票会产生不同的其他逻辑,如: * 1、购票后记录文本日志 * 2、购票后记录数据库日志 * 3、购票后发送短信 * 4、购票送抵扣卷、兑换卷、积分 ...
Java 微信提现报错:No appropriate protocol (protocol is disabled or cipher suites are inappropr)
前言今天在新的服务器上搭建 Java 环境,从 Oracle 官网上下载了最新的 jdk 版本 1.8.0_311,然后上传到服务器 jar 包,启动 jar 包,这些常规操作。本以为这个项目搭建就此结束,但是当测试提现功能时,服务器突然报错:No appropriate protocol (protocol is disabled or cipher suites are inappropr
解决首先排查了下微信商户号、支付参数等是否有误,但若参数有误的话微信会直接返回相应错误,所以不是该问题。
然后将思路转移到是否是环境问题,则确认了一下之前的服务器上的 jdk 版本和当前服务器 jdk 版本是否一致,因为下载的是最新的,所以已经不一致了
可以提现的服务器 jdk 版本是 212
当前服务器 jdk 版本是 311
经翻阅互联网文章发现 Java8-291 之后 , 禁用了 TLS1.1, 而我们安装的是 java8-311。并且该禁用该参数会导致微信提现报错,所以我们需要放开该限制。
修改 java.security 文件首先找到安装 java 的目录,如果忘记可以通过环境变量中 ...
PHP 创建链式对象
前言优雅的代码可以让人看着身心愉悦,所以开发规范是很重要的一关,如果满屏幕的过程式代码,那随着时间流逝,在想阅读这段代码这将是一场灾难。这次来创建一个简单的 PHP 链式对象,来提高代码的可读性和规范性。
你可以使用链式 API 来创建对象。使用单独的方法调用来逐渐添加数据,正是因为每个方法都返回 $this ,你可以在任意一次调用后让整个流程停下来。
接下来,我们创建一个最简单的 AbstractCalc 链式对象来计算数值。
创建 AbstractCalc123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566class AbstractCalc{ private int $number; public function __construct($number) { $this->number = $number; } ...
MySQL 表数据转换为 SQLite 表数据
前言由于公司一些业务需要,需要客户端本地存入 SQLite 一些业务数据,所以当后端处理好 MySQL 表数据后需要转换为 SQLite 的数据表文件给到客户端。这里用到的工具是 Navicat Permium,可以支持 SQLite 的操作
1. 在本地创建一个空的 db 文件这里命名为 test.db并通过 Navicat Permium 打开该 db 文件
2. 将准备好的 mysql 表导出为 .txt 文件对表右键点击 Export Wizard 需注意中间需要勾选上 Include column title
3. 在第一步打开的 SQLite 数据库中导入刚刚导出好的 .txt 文件导入完成后,就可以将第一步本地创建的 db 文件给到客户端了。
PHP 下载远端文件到本地
1234567891011121314151617/** * 下载远端文件到本地 * @param string $url * @param string $path */public function downloadFile(string $url, string $path){ $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30); $file = curl_exec($ch); curl_close($ch); $resource = fopen($path, 'w'); fwrite($resource, $file); fclose($resource);}
Android 配置 Https 抓包
前言在开发阶段可以通过控制台查看调用接口的情况,当 App 版本上线后,且正式域名为 https 的默认抓包工具是无法抓到接口信息的,这个时候需要我们在本地配置 network_security_config 来允许抓包
前提前提:在手机端和电脑端都必须安装https的安全证书配置:打测试包时,项目设置默认信任所有证书(系统+用户)
在工程res-xml目录中创建一个名为 network_security_config.xml的文件,文件内容如下:12345678<network-security-config> <base-config cleartextTrafficPermitted="true"> <trust-anchors> <certificates src="system" overridePins="true" /> <certificates src="user" ove ...
Elasticsearch 的学习教程汇总
Elasticsearch 快速入门
SQL 转 Elasticsearch
Kafka 的学习教程汇总
OrcHome Kafka中文教程
掘金小册-图解 Kafka 之实战指南
kafka listeners 和 advertised.listeners 的区别及应用