Open hankviv opened 4 years ago
UML
简单工厂模式: 简单工厂模式包含如下角色:
Factory:工厂角色 负责实现创建所有实例的内部逻辑
Product:抽象产品角色 所创建的所有对象的父类,负责描述所有实例所共有的公共接口
ConcreteProduct:具体产品角色 创建目标,所有创建的对象都充当这个角色的某个具体类的实例。
将对象的创建和对象本身业务处理分离可以降低系统的耦合度,使得两者修改起来都相对容易。
在调用工厂类的工厂方法时,由于工厂方法是静态方法,使用起来很方便,可通过类名直接调用,而且只需要传入一个简单的参数即可。
工厂类的职责相对过重,增加新的产品需要修改工厂类的判断逻辑,这一点与开闭原则是相违背的。
工厂模式: 将产品类的实例化操作延迟到工厂子类中完成,即通过工厂子类来确定究竟应该实例化哪一个具体产品类。 工厂方法模式包含如下角色:
Product:抽象产品 ConcreteProduct:具体产品 Factory:抽象工厂 ConcreteFactory:具体工厂
实例:
抽象工厂模式: 提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们具体的类。抽象工厂模式又称为Kit模式,属于对象创建型模式。 抽象工厂模式和工厂方法不太一样,它要解决的问题比较复杂,不但工厂是抽象的,产品是抽象的,而且有多个产品需要创建。 需要创建的产品也是抽象的。 工厂模式:实例 -> 类 -> 类工厂 抽象工厂:实例 -> 类 -> 类工厂 -> 抽象工厂
建造者模式: 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 建造者模式是一步一步创建一个复杂的对象,它允许用户只通过指定复杂对象的类型和内容就可以构建它们,用户不需要知道内部的具体构建细节。
建造者模式包含如下角色:
单例模式: 单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例,这个类称为单例类,它提供全局访问的方法。 单例模式的要点有三个:
<?php
class Single {
private static $_instance;
private function __construct(){
echo 'construct function';
}
public function __clone()
{
}
public static function getInstance()
{
if(!self::$_instance instanceof self ){
self::$_instance = new self;
}else{
return self::$_instance;
}
}
public function test()
{
echo 'test';
}
}
构造函数需要标记为private(访问控制:防止外部代码使用new操作符创建对象),构造函数为私有的时候,无法new对象。单例类不能在其他类中实例化,只能被其自身实例化;
拥有一个保存类的实例的静态成员变量
拥有一个访问这个实例的公共的静态方法(常用getInstance()方法进行实例化单例类,通过instanceof操作符可以检测到类是否已经被实例化)
使用单例模式, 则可以避免大量的new 操作消耗的资源。对于一些需要频繁创建和销毁的对象,单例模式无疑可以提高系统的性能。
单例模式的主要优点在于提供了对唯一实例的受控访问并可以节约系统资源;其主要缺点在于因为缺少抽象层而难以扩展,且单例类职责过重。
结构型模式 结构型模式(Structural Pattern)描述如何将类或者对 象结合在一起形成更大的结构,就像搭积木,可以通过 简单积木的组合形成复杂的、功能更为强大的结构。 包含模式:
适配器模式: 定义: 将一个接口转换成客户希望的另一个接口,适配器模式使接口不兼容的那些类可以一起工作,其别名为包装器(Wrapper)。 适配器模式既可以作为类结构型模式,也可以作为对象结构型模式。
适配器模式包含如下角色:
创建型模式 创建型模型是对类实例化进行了抽象。将对象的创建和使用进行分离。只需要关系他外在的创建方式,而不清楚具体实例话实现。使系统设计符合单一职责原则 创建型模式隐藏了类的实例的创建细节,通过隐藏对象如何被创建和组合在一起达到使整个系统独立的目的。 包含模式