设计模式-21-策略模式
策略模式
在策略模式中一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为型模式。
在策略模式定义了一系列算法或策略,并将每个算法封装在独立的类中,使得它们可以互相替换。通过使用策略模式,可以在运行时根据需要选择不同的算法,而不需要修改客户端代码。
在策略模式中,我们创建表示各种策略的对象和一个行为随着策略对象改变而改变的 context 对象。策略对象改变 context 对象的执行算法。
意图:
定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换。
主要解决:
在有多种算法相似的情况下,使用 if…else 所带来的复杂和难以维护。
何时使用:
一个系统有许多许多类,而区分它们的只是他们直接的行为。
如何解决:
将这些算法封装成一个一个的类,任意地替换。
关键代码:
实现同一个接口。
优点:
算法可以自由切换
避免使用多重条件判断
扩展性良好。
缺点:
策略类会增多
所有策略类都需要对外暴露。
使用场景:
如果在一个系统里面有许多类,它们之间的区别仅在于它们的行为,那么使用策略模式可以动态地让一个对象在许多行为中选择一种行为
一个系统需 ...
企业开发进阶-2-Ngnix
NginxNginx 概述Nginx 是高性能的 HTTP 和反向代理的服务器,处理高并发能力是十分强大的,能经受高负载的考验,有报告表明能支持高达 50,000 个并发连接数。
正向代理在客户端配置代理服务器,通过代理服务器进行互联网访问
反向代理 客户端不需要任何配置就可以访问,只需要将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,再返回给客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器地址,隐藏了真实服务器IP 地址。
负载均衡增加服务器的数量,然后将请求分发到各个服务器上,将原先请求集中到单个服务器上的情况改为将请求分发到多个服务器上,将负载分发到不同的服务器
动静分离为了加快网站的解析速度,可以把动态页面和静态页面由不同的服务器来解析,加快解析速度。降低原来单个服务器的压力。
Nginx常用命令和配置文件常用命令
命令
说明
cd /usr/local/nginx/sbin
在Linux环境下进入nginx目录
./nginx -v
查看nginx版本号
./nginx
启动ngin ...
设计模式-20-状态模式
状态模式
在状态模式中,类的行为是基于它的状态改变的,属于行为型模式。
在状态模式中,我们创建表示各种状态的对象和一个行为随着状态对象改变而改变的 context 对象。
意图:
允许对象在内部状态发生改变时改变它的行为,对象看起来好像修改了它的类。
主要解决:
对象的行为依赖于它的状态(属性),并且可以根据它的状态改变而改变它的相关行为。
何时使用:
代码中包含大量与对象状态有关的条件语句。
如何解决:
将各种具体的状态类抽象出来。
关键代码:
通常命令模式的接口中只有一个方法。而状态模式的接口中有一个或者多个方法。
而且,状态模式的实现类的方法,一般返回值,或者是改变实例变量的值。
状态模式一般和对象的状态有关。实现类的方法有不同的功能,覆盖接口中的方法。
状态模式和命令模式一样,也可以用于消除 if…else 等条件选择语句。
优点:
封装了转换规则
枚举可能的状态,在枚举状态之前需要确定状态种类
将所有与某个状态有关的行为放到一个类中,并且可以方便地增加新的状态,只需要改变对象状态即可改变对象的行为
允许状态转换逻辑与状态对象合成一体,而不是某一个巨大的条件语句 ...
设计模式-19-解释器模式
解释器模式
解释器模式提供了评估语言的语法或表达式的方式
它属于行为型模式,实现了一个表达式接口,该接口解释一个特定的上下文。
这种模式被用在 SQL 解析、符号处理引擎等。
意图:
给定一个语言,定义它的文法表示,并定义一个解释器,这个解释器使用该标识来解释语言中的句子。
主要解决:
对于一些固定文法构建一个解释句子的解释器。
何时使用:
如果一种特定类型的问题发生的频率足够高,那么可能就值得将该问题的各个实例表述为一个简单语言中的句子。这样就可以构建一个解释器,该解释器通过解释这些句子来解决该问题。
如何解决:
构建语法树,定义终结符与非终结符。
关键代码:
构建环境类,包含解释器之外的一些全局信息,一般是 HashMap。
应用实例:
编译器、运算表达式计算。
优点:
可扩展性比较好,灵活
增加了新的解释表达式的方式
易于实现简单文法。
缺点:
可利用场景比较少
对于复杂的文法比较难维护
解释器模式会引起类膨胀
解释器模式采用递归调用方法。
使用场景:
可以将一个需要解释执行的语言中的句子表示为一个抽象语法树。
一些重复出现的问题可以用一种简单的语言来进行表 ...
企业开发进阶-5-DockerAdvance
DockerfileDockerfile 是用来构建 Docker 镜像的文本文件,是由一条条构建镜像所需的指令和参数构成的脚本。
三部曲
编写 Dockerfile 文件
docker build 命令构建镜像
docker run 依镜像运行容器实例
基础知识
每条保留字指令都必须为大写字母且后面要跟随至少一个参数
指令按照从上到下,顺序执行
# 表示注释
每条指令都会创建一个新的镜像层并对镜像进行提交
执行 Dockerfile 大致流程
docker 从基础镜像运行一个容器
执行一条指令并对容器作出修改
执行类似 docker commit 的操作提交一个新的镜像层
docker 再基于刚提交的镜像运行一个新容器
执行 dockerfile 中的下一条指令直到所有指令都执行完成
小结
Dockerfile 定义了进程需要的一切东西。Dockerfile 涉及的内容包括执行代码或者是文件、环境变量、依赖包、运行时环境、动态链接库、操作系统的发行版、服务进程和内核进程
Docker 镜像,在用 Dockerfile 定义一个文件之后,docker build ...
企业开发进阶-5-DockerInstall
安装 Docker安装 Docker安装文档
安装步骤
确定机器是CentOS7及以上版本
1cat /etc/redhat-release
卸载旧版本
12345678sudo yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-engine
yum安装gcc
12yum -y install gccyum -y install gcc-c++
Set up the repository
1yum install -y yum-utils
设置镜像仓库
1yum-config-manager --add-re ...