设计模式之建立型模式 - 特别的变量问题

    Factory Method(工厂方法):定义一个用于建立对象的接口,让子类决定将哪个类实例化。Factory Method使一个类的实例化延迟到其子类。
    什么是工厂?工厂是按订单生产不一样的产品。固然,这些产品都是同一类的,或同一系列的。工厂方法就是指类中有一个成员函数,即方法,它是用来按你的指令建立你所须要的对象的。
    实现方式:咱们能够看出,其中,拥有工厂方法的类是核心代码,产品是相对于此核心代码的具体的代码。因此:
    咱们使用抽象类或接口定义来定义产品。实际的产品经过继承已定义的抽象类或实现已定义的接口来实现。
    工厂方法以品名(产品类名)为参数,根据此参数建立指定的“产品”。
    总结:让各类类(产品)成为变量。
    选择模式:选类算法

    Abstract Factory(抽象工厂):提供一个建立一系列相关或相互依赖对象的接口,而无需指定它们具体的类。
    相对于工厂方法,如前所述,它是一个系列或一个分类的产品,但若是,产品不是一个系列,或不是一个分类,咱们就要让不一样的工厂来进行生产。因而,工厂也被具体化了。
    实现方式:咱们先要把前述的拥有具体的工厂方法的类去掉具体的实现,建一个抽象的工厂出来。而实际的工厂,则从抽象工厂继承。
    这里,工厂所面对的产品,多是同一个接口或抽象类,也多是多个接口或抽象类,前者,是因数据处理方式不一样,而须要不一样的工厂,后者,则可能因接口不一样,而须要不一样的工厂。
    一样,与产品建立同样,工厂的建立,最好也是以类名做为参数。
    特性:因为工厂方法类是抽象,因此,可能继承不一样的工厂方法类的实现。从而有不一样的工厂方法。
    总结:实现了产品的分类,而且不一样类的产品,由不一样的工厂建立。
    选择模式:选类,同时选工厂方法闭包

    Builder(构造器):将一个复杂对象的构建与它的表示分离,使得一样的构建过程能够建立不一样的表示。
    构造器,也能够叫生产线。由于,类自己是一种装配模式。好比是使用合成/聚合复用的类。但因为其零部件组合不一样,类的产生,则须要有不一样的算法。而具体是算法则是,将各零部件的“生产”按需进行装配组合。
    实现方式:
    抽象的构造器(Builder)的类或接口,定义全部零部件建立须要实现的方法,由此继承的类负责零部件的建立方法的具体实现。
    抽象的构造器管理类Director,由此继承的类负责装配,即由具体的类肯定按什么样的顺序调用哪些零部件的建立的方法。
    核心对象中使用构造器调用方法,根据传入的构造器参数建立不一样的构造器管理的类,从而产生所需的对象。
    总结:让类的构建算法成为变量。
    选择模式:选择构造器。选择构建算法,即选择装配。
    注:若是构造器是单一的,则不须要定义抽象的构造器(Builder)的类或接口。
    若是构建算法是单一的,则不须要抽象的构造器管理类Director。
    固然,对于这两者的当前的不须要定义,必定要考虑潜在需求。若是有。则如今是单一的,也要定义好。函数

    Prototype(原型):用原型实例指定建立对象的种类,而且经过拷贝这个原型来建立新的对象。
    此问题的核心与具体分类三个层次:无数据对象,有数据对象,加载了运行时数据的对象。由此能够看出,此类应用最广的也是与数据相关的对象。这是由于,PHP自己不是彻底的动态语言。固然PHP5.3开始支持闭包,能够动态给类添加方法。这一状况下,还但是这样的核心与具体分类三个层次:无涉及具体方法的对象,有涉及具体方法的对象,有运行时方法的对象。
    实现方式:抽象类中无任何具体数据或方法,它是抽象原型。具体的原型经过继承它来实现。但在实际使用时,代码先建立具体的原型,其后,复制(clone)原型生成实际使用的对象,并给其增长运行时数据或方法。
    总结:类中的部分属性当成变量:类中的部分数据在变,方法的算法也在变。将不变的数据与变化的方法放入到原型子类中。
    选择模式:选择半成品ui

    Singleton(单件):保证一个类仅有一个实例,并提供一个访问它的全局访问点。
    实现方式:经过静态的getInstance方法确认类的实例是否存在,不存在则建立,而后返回这个惟一的实例对象。
    总结:让有类成为超全局变量,使得一个类仅有一个实例。
    选择模式:惟一性选择对象

总结:能够看出,除单件模式之外,本小类中其它的模式,凡是相对具体的代码,都是使用抽象类,接口先定义好,经过这一方式应对程序中不一样需求的变化。单件模式则是增长一个静态变量存于类中,经过静态方法检查有没有建立,保证只建立一个,是static的运用。继承

相关文章
相关标签/搜索