centos7 安装hexo

安装node:


yum install -y nodejs

 

安装hexo脚手架:


npm install -g cnpm --registry=https://registry.npm.taobao.org

cnpm install -g hexo-cli

 

安装git(因为不安装会初始化很慢):


yum install -y git

 

初始化一个博客:


hexo init blog

 

启动服务(可以提供http服务)


hexo server

 

Let’s Encrypt生成通配符证书

下载工具:

wget https://dl.eff.org/certbot-auto

给予执行权限:

chmod u+x certbot-auto

生成证书:

./certbot-auto certonly -d “*.yubangweb.com” -m xxx@yubangweb.com –manual –preferred-challenges dns-01 –server https://acme-v02.api.letsencrypt.org/directory

 

注意:上面的域名换成自己的,邮箱换成自己的。然后根据提示,在自己的域名解析添加txt记录完成验证

 

证书更新:

certbot-auto renew

 

设计模式—Abstract Factory模式

Abstract Factory模式,抽象工厂模式。首先这种模式跟Factory模式非常相近,但是抽象工厂模式是创建一系列产品,而工厂模式创建的是一种产品。

 

应用场景:

  1. 生成一组对象很复杂的时候

 

优点:

  1. 封装性好

 

缺点:

  1. 扩展性低,每增加一个产品,所有工厂子类都要同步增加

 

UML:

 

 

设计模式—builder模式

builder模式,可以组装复杂的实例。

构建者模式,首先定义一个类,然后这个类定义好一系列函数来生成必要数据,再提供一个函数来调用这些函数。

 

应用场景:

  1. 初始化一个类非常复杂
  2. 产品类的调用顺序对结果有影响

 

优点:

  1. 客户端不需要知道产品内部细节,解耦性强
  2. 创建流程清晰,方便控制创建流程

 

缺点:

  1. 客户端代码变得冗长

 

UML:

 

例子:

产品线只需要定义各部分的工艺,就可以一个流程生产出产品。

 

设计模式—prototype模式

prototype模式,通过复制生成实例。

通过复制已有实例生成一个新的实例。

 

应用场景:

  1. 创建对象需要非常复杂的数据准备

 

优点:

  1. 简化创建对象

 

缺点:

  1. 每个类都需要实现clone方法

 

UML:

 

例子:

就像制作菜式一样,当你成功实践出一道美食,以后只需要复制烹饪的食材和方法即可。

 

 

设计模式—Singleton模式

Singleton模式,单例模式。

一个类仅有一个实例,然后全局提供访问。

 

使用场景:

  1. 需要频繁实例化然后销毁的对象
  2. 创建资源耗时过多或者资源消耗过大
  3. 一些需要共享的资源

 

优点:

  1. 资源利用率高

 

缺点:

  1. 不适合频繁变化的对象

 

UML:

 

例子:

同一时刻只允许一个程序读取文件,只允许一个程序连接打印机。

 

设计模式—Factory Method模式

Factory Method模式,工厂方法模式。

我们初始化类可以通过 new A1(),new A2()的方法产生,但是呢,假如初始化类的时候有一些需要转换的参数或其他需求,我们可以定义一个类B,然后通过类B的一个函数返回我们需要的初始化的实例。

但是这种通过一个类的函数生成不同的类的实例叫做简单工厂模式,但是当我们需要这个类(工厂类)生成非常多不同类的实例的时候,这个类就会变得非常臃肿。另一种解决方案是,生成不同的类的实例的逻辑实现放到工厂类的子类来实现,每个工厂类的实例只对应生成一个类的实例。

 

应用场景:

  1. 在生成对象很复杂的时候
  2. 需要解耦的时候
  3. 需要扩展性的时候

 

优点:

  1. 多态性
  2. 扩展性好
  3. 解耦

 

缺点:

  1. 当生成类种类很多的时候,要对应编写很多工厂类

 

UML:

例子:

例如手机工厂,每生产一种型号的手机(产品类子类)就多开一条产品线(工厂类子类)。

 

 

设计模式—Template Method模式

Template Method模式,模板方法模式。当多个需求都有相同的操作步骤,仅仅是某些步骤实现不同的时候,就可以定义一个父类,固定结构。然后定义子类,实现具体的细节算法。

 

应用场景:

  1. 多个需求都有很多相同的结构,仅仅是部分实现不同

 

优点:

  1. 提高了代码复用性
  2. 实现了反向控制

 

缺点:

  1. 由于每一个实现都引入一个子类,所以增加了系统实现复杂度

 

UML:

 

例子:

一批同型号的榨汁机卖给一条街的店铺,店铺A放置苹果进去,得到苹果汁。店铺B放置西瓜进去,得到西瓜汁。使用流程都一样,但是具体使用,放置材料这步修改了,就得到不同的产物,这就是模板方法模式。

 

 

设计模式—Adapter模式

Adapter模式,就是适配器模式。

 

假如已有一个类(A),但是这个类输出的数据并不能满足新的需求。那么我们可以定义一个接口(B)需要实现函数(C),然后新建一个类(D)继承类(A)实现接口(B)。然后类(D)在实现函数(C)的时候,调用类A的函数,然后处理输出新的需求需要的数据。

 

应用场景:

  1. 已有实现的类,但是不符合现有接口规范
  2. 使用第三方api或者库的时候转变成自己需要的接口

 

优点:

  1. 系统后期修改和扩展都很容易

 

缺点:

  1. 过多的适配器会让系统变得凌乱

 

UML:

 

例子:

例如家里的插座交流电都是220V,但是我们各种电器需要的电压却各不相同,所以就需要一个电源适配器把电流转换成电器适合的电压,这就是适配器模式。