创建型模式

对象之间的常见关系

泛化关系:体现在类的继承中,具体代码表现在继承非抽象类。小汽车->suv
实现关系:也是一种继承关系,具体表现在继承抽象类。车->小汽车

聚合关系:表示的是一种部分与整体的关系,整体由部分构成。例如,部门由员工构成
组合关系:也是一种部分和整体的关系,但是部分与整体之间存在强依赖。例如,公司和部门,公司倒闭了,部门也不存在。

关联关系:用来定义对象之间天然的结构,自然的从属,是一种强关联关系。例如学校与学生,书籍和作者。在代码中,以类的成员变量表现。
依赖关系:表示的是一种是一种调用关系,是一种临时性的关系。代码中,以方法的参数体现的

创建型模式

简单工厂模式

http://design-patterns.readthedocs.org/zh_CN/latest/creational_patterns/simple_factory.html

含义:将类的创建和行为分离,通过传入不同的参数便能生成不同的类的实例。调用静态方法就能创建不同的类的实例。

实例:java中格式化时间戳。
public final static DateFormat getDateInstance();
public final static DateFormat getDateInstance(int style);
public final static DateFormat getDateInstance(int style,Locale
locale);

优点:实现对象的创建和对象的使用分离,将对象的创建交给专门的工厂类负责,无需关心具体的实现的逻辑。通过传入参数即可

缺点:工厂类不够灵活,增加新的具体产品需要修改工厂类的判断逻辑代码,而且产品较多时,工厂方法代码将会非常复杂。

适用情况:工厂类负责创建的对象比较少;客户端只知道传入工厂类的参数,对于如何创建对象不关心。

工厂方法模式

http://design-patterns.readthedocs.org/zh_CN/latest/creational_patterns/factory_method.html

含义:定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。说的通俗一点吧,就是把将工厂类抽象成接口,具体的代工厂去实现此接口,同时把产品类也抽象成接口,再构造具体的产品去实现些接口。

优点:增加新的产品或功能时,无需修改原来的代码。只需要增加新产品或者新功能的类,以及创建这个产品或者功能的类即可。

缺点:增加产品或功能时,需要同时增加两个类。增加了复杂性。

适用情况:1,一个类不知道它所需要的类(之前),需要时再动态创建。2,将创建对象的任务教给多个工厂实现。基本和简单工厂模式类似,只是在简单工厂模式下抽象了具体的工厂类,降低了系统的耦合度。

抽象工厂模式

http://design-patterns.readthedocs.org/zh_CN/latest/creational_patterns/abstract_factory.html

含义:当需要创建一系列相关和相互依赖的对象时,而无需指定他们具体的类。

优点:隔离了具体类的生成,使得客户并不需要知道什么被创建,而且每次可以通过具体工厂类创建一个产品族中的多个对象,增加或者替换产品族比较方便,增加新的具体工厂和产品族很方便

缺点:在于增加新的产品等级结构很复杂,需要修改抽象工厂和所有的具体工厂类,对“开闭原则”的支持呈现倾斜性。

适用情况:一个系统不应当依赖于产品类实例如何被创建、组合和表达的细节;系统中有多于一个的产品族,而每次只使用其中某一产品族;属于同一个产品族的产品将在一起使用;系统提供一个产品类的库,所有的产品以同样的接口出现,从而使客户端不依赖于具体实现。

单例模式

http://design-patterns.readthedocs.org/zh_CN/latest/creational_patterns/singleton.html

含义:确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例,这个类称为单例类,它提供全局访问的方法

优点:提供了对唯一实例的受控访问并可以节约系统资源

缺点:在于因为缺少抽象层而难以扩展,且单例类职责过重

适用情况:一个系统不应当依赖于产品类实例如何被创建、组合和表达的细节;系统中有多于一个的产品族,而每次只使用其中某一产品族;属于同一个产品族的产品将在一起使用;系统提供一个产品类的库,所有的产品以同样的接口出现,从而使客户端不依赖于具体实现。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章