创建型模式横向对比

简单工厂模式

定义

简单工厂模式(Simple Factory Pattern):又称为静态工厂方法(Static Factory Method)模式,它属于类创建型模式。在简单工厂模式中,可以根据参数的不同返回不同类的实例。简单工厂模式专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。

类图

工厂方法模式

定义

工厂方法模式(Factory Method Pattern)又称为工厂模式,也叫虚拟构造器(Virtual Constructor)模式或者多态工厂(Polymorphic Factory)模式,它属于类创建型模式。在工厂方法模式中,工厂父类负责定义创建产品对象的公共接口,而工厂子类则负责生成具体的产品对象,这样做的目的是将产品类的实例化操作延迟到工厂子类中完成,即通过工厂子类来确定究竟应该实例化哪一个具体产品类。

类图

抽象工厂模式

定义

抽象工厂模式(Abstract Factory Pattern):提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们具体的类。抽象工厂模式又称为Kit模式。

类图

建造者模式

定义

建造者模式(Builder Pattern):将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
建造者模式是一步一步创建一个复杂的对象,它允许用户只通过指定复杂对象的类型和内容就可以构建它们,用户不需要知道内部的具体构建细节。建造者模式属于对象创建型模式。根据中文翻译的不同,建造者模式又可以称为生成器模式。

类图

原型模式

定义

原型模式(Prototype Pattern):原型模式是一种对象创建型模式,用原型实例指定创建对象的种类,并且通过复制这些原型创建新的对象。原型模式允许一个对象再创建另外一个可定制的对象,无须知道任何创建的细节。
原型模式的基本工作原理是通过将一个原型对象传给那个要发动创建的对象,这个要发动创建的对象通过请求原型对象拷贝原型自己来实现创建过程。

类图

单例模式

定义

单例模式(Singleton Pattern):单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例,这个类称为单例类,它提供全局访问的方法。
单例模式的要点有三个:一是某个类只能有一个实例;二是它必须自行创建这个实例;三是它必须自行向整个系统提供这个实例。单例模式是一种对象创建型模式。单例模式又名单件模式或单态模式。

类图

行为型模式横向对比

行为型模式横向对比

职责链模式

定义

职责链模式(Chain of Responsibility Pattern):避免请求发送者与接收者耦合在一起,让多个对象都有可能接收请求,将这些对象连接成一条链,并且沿着这条链传递请求,直到有对象处理它为止。由于英文翻译的不同,职责链模式又称为责任链模式,它是一种对象行为型模式。

类图

命令模式

定义

命令模式(Command Pattern):将一个请求封装为一个对象,从而使我们可用不同的请求对客户进行参数化;对请求排队或者记录请求日志,以及支持可撤销的操作。命令模式是一种对象行为型模式,其别名为动作(Action)模式或事务(Transaction)模式。

类图

解释器模式

定义

解释器模式(Interpreter Pattern) :定义语言的文法,并且建立一个解释器来解释该语言中的句子,这里的“语言”意思是使用规定格式和语法的代码,它是一种类行为型模式。

类图

迭代器模式

定义

迭代器模式(Iterator Pattern) :提供一种方法来访问聚合对象,而不用暴露这个对象的内部表示,其别名为游标(Cursor)。迭代器模式是一种对象行为型模式。

类图

中介者模式

定义

中介者模式(Mediator Pattern)定义:用一个中介对象来封装一系列的对象交互,中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。中介者模式又称为调停者模式,它是一种对象行为型模式。

类图

备忘录模式

定义

备忘录模式(Memento Pattern):在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样可以在以后将对象恢复到原先保存的状态。它是一种对象行为型模式,其别名为Token。

类图

观察者模式

定义

观察者模式(Observer Pattern):定义对象间的一种一对多依赖关系,使得每当一个对象状态发生改变时,其相关依赖对象皆得到通知并被自动更新。观察者模式又叫做发布-订阅(Publish/Subscribe)模式、模型-视图(Model/View)模式、源-监听器(Source/Listener)模式或从属者(Dependents)模式。观察者模式是一种对象行为型模式。

类图

状态模式

定义

状态模式(State Pattern) :允许一个对象在其内部状态改变时改变它的行为,对象看起来似乎修改了它的类。其别名为状态对象(Objects for States),状态模式是一种对象行为型模式。

类图

策略模式

定义

策略模式(Strategy Pattern):定义一系列算法,将每一个算法封装起来,并让它们可以相互替换。策略模式让算法独立于使用它的客户而变化,也称为政策模式(Policy)。策略模式是一种对象行为型模式。

类图

模版方法模式

定义

模板方法模式(Template Method Pattern):定义一个操作中算法的骨架,而将一些步骤延迟到子类中,模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。模板方法是一种类行为型模式。

类图

访问者模式

定义

访问者模式(Visitor Pattern):表示一个作用于某对象结构中的各元素的操作,它使我们可以在不改变各元素的类的前提下定义作用于这些元素的新操作。访问者模式是一种对象行为型模式。

类图

结构型模式横向对比

结构型模式横向对比

适配器模式

定义

适配器模式(Adapter Pattern) :将一个接口转换成客户希望的另一个接口,适配器模式使接口不兼容的那些类可以一起工作,其别名为包装器(Wrapper)。适配器模式既可以作为类结构型模式,也可以作为对象结构型模式。

类图


桥接模式

定义

桥接模式(Bridge Pattern):将抽象部分与它的实现部分分离,使它们都可以独立地变化。它是一种对象结构型模式,又称为柄体(Handle and Body)模式或接口(Interface)模式。

类图

组合模式

定义

组合模式(Composite Pattern):组合多个对象形成树形结构以表示“整体-部分”的结构层次。组合模式对单个对象(即叶子对象)和组合对象(即容器对象)的使用具有一致性。
组合模式又可以称为“整体-部分”(Part-Whole)模式,属于对象的结构模式,它将对象组织到树结构中,可以用来描述整体与部分的关系。

类图

装饰模式

定义

装饰模式(Decorator Pattern) :动态地给一个对象增加一些额外的职责(Responsibility),就增加对象功能来说,装饰模式比生成子类实现更为灵活。其别名也可以称为包装器(Wrapper),与适配器模式的别名相同,但它们适用于不同的场合。根据翻译的不同,装饰模式也有人称之为“油漆工模式”,它是一种对象结构型模式。

类图

外观模式

定义

外观模式(Facade Pattern):外部与一个子系统的通信必须通过一个统一的外观对象进行,为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。外观模式又称为门面模式,它是一种对象结构型模式。

类图

享元模式

定义

享元模式(Flyweight Pattern):运用共享技术有效地支持大量细粒度对象的复用。系统只使用少量的对象,而这些对象都很相似,状态变化很小,可以实现对象的多次复用。由于享元模式要求能够共享的对象必须是细粒度对象,因此它又称为轻量级模式,它是一种对象结构型模式。

类图

代理模式

定义

代理模式(Proxy Pattern) :给某一个对象提供一个代理,并由代理对象控制对原对象的引用。代理模式的英文叫做Proxy或Surrogate,它是一种对象结构型模式。

类图

# Google Cloud Platform

注册部分

注册部分非常的简单,只需要拥有Google账号即可。
每个账号内有免费的12个projects,除此之外,还可以申请提高配额或者删除项目。

Snipaste_2018-12-02_16-07-01.png

在这里我已经新建了一个project了,所以这里显示还剩下11个。

主页

Snipaste_2018-12-02_16-07-22.png
接下来我们开始介绍主页的内容:
Google Cloud Platform 是以项目为管理目录的,所以在查看任何东西之前,都需要首先选择一个项目(当然,前提是你得有一个项目。如果没有,请参见注册)

选择了项目之后的首页

Snipaste_2018-12-02_16-07-37.png

在这里我们一一解释一下

项目信息

这里是项目的基本信息,包括名称,编号等等信息。
在这里还可以进行项目的迁移关停操作。

资源

在这里显示了这个project所占用的所有的资源,包括存储资源和Appengine

Appengine

我们首先来说Appengine是什么东西

Google App Engine是一个开发、托管网络应用程序的平台,使用Google
管理的数据中心。它在2008年4月发布了第一个beta版本。
Google App Engine使用了云计算技术。它跨越多个服务器和数据中心来
虚拟化应用程序。其他基于云的平台还有Amazon Web Services和微
软的Azure服务平台等。

Google App Engine在用户使用一定的资源时是免费的。支付额外的费用可以获得应用程序所需的更多的存储空间、带宽或是CPU负载。

API

这个就很简单了,就是显示的调用api的次数,频率,事件等等信息

# 工厂模式

设计模式

在之前的简单工厂模式中,虽然能够比较好的处理封装创造对象的过程,但是明显的,每当要添加一种新的面包时候,就需要修改简单类工厂,增加case分支(或者是if else分支),这样最大的问题就是不满足于开闭原则。

工厂模式-简单工厂模式的升级版

GOF对于工厂方法模式的定义是:定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法将一个类的实例化延迟了他的子类。

来看他的结构图

屏幕快照 2018-10-17 下午4.25.34.png

简单来说,每个工厂负责实例化本工厂产生的产品,在客户端编写代码时候都按照父类(接口)来进行编写,因此,无论实例化了哪一个类,都可以直接替换父类(依赖倒转原则),从而达到可以复用代码的目的。

代码修改

本代码是在简单工厂模式的基础上修改而来的。简单工厂,请移步前一篇文章。

//首先来看工厂的接口
public interface IFactory{

    BreadMaker CreateBread();
}
//不同的面包工厂建立一个具体的工厂方法来实现这个借口
public class BlackBreadFactory implements IFactory{

    //覆盖父类的抽象方法
    public BreadMaker CreateBread(){

        return new BlackBread();
    }
}

public class HoneyBreadFactory implements IFactory{

    //覆盖父类的抽象方法
    public BreadMaker CreateBread(){

        return new HoneyBread();
    }
}



/*

客户端的代码实现
*/
public static void main(String[] args){

    BreadMaker breadMaker;
    System.out.Println("小面的面包店开业了!");

    //顾客上门来买面包,要黑面包
    IFactory breadFactory = new BlackBreadFactory();
    breadMaker = breadFactory.CreateBread();
    breadMaker.getBread();

}

需要注意的是:
在客户端中,如果需要创建一个对象的话,那么首先实例化一个工厂(子工厂),接着用这个工厂去创造相应的对象就可以了。

工厂模式和简单工厂模式的对比

简单工厂模式违反了开放-封闭原则,但是保持了封装对象创建的过程。
可以说工厂模式就是简单工厂模式的升级版,是简单工厂的进一步抽象和推广。但是工厂模式也有缺点:每增加一个产品,就要相应的添加一个产品工厂类,增大了额外的开发量。

工厂模式适用于以下三种情况

  • 当一个类不知道他所创建的对象的类的时候,比如说要创建一个白面包的对象,但是并不知道他的类是WhiteBread。
  • 当一个类希望由他的子类来指定它所创建的对象的时候。
  • 当类创建的对象的职责委托给多个帮助子类中的一个,并且希望将哪一个帮助子类是代理者这一信息局部化的时候。

如何选择

要取决于具体的应用,就像是两个模式的名称就可以看出来,对于一些比较简单的应用,“产品”类比较少的时候,使用简单工厂模式就可以满足要求,而对于“产品”比较丰富的应用,过多的分支不利于程序的维护,这时候应该选择工厂模式来降低程序的维护量。