hankviv / blog_issue

issue
2 stars 0 forks source link

设计模式 #32

Open hankviv opened 4 years ago

hankviv commented 4 years ago

创建型模式 创建型模型是对类实例化进行了抽象。将对象的创建和使用进行分离。只需要关系他外在的创建方式,而不清楚具体实例话实现。使系统设计符合单一职责原则 创建型模式隐藏了类的实例的创建细节,通过隐藏对象如何被创建和组合在一起达到使整个系统独立的目的。 包含模式

hankviv commented 4 years ago

UML image

hankviv commented 4 years ago

简单工厂模式: 简单工厂模式包含如下角色:

hankviv commented 4 years ago

工厂模式: 将产品类的实例化操作延迟到工厂子类中完成,即通过工厂子类来确定究竟应该实例化哪一个具体产品类。 工厂方法模式包含如下角色:

Product:抽象产品 ConcreteProduct:具体产品 Factory:抽象工厂 ConcreteFactory:具体工厂

image

image

实例: image

hankviv commented 4 years ago

抽象工厂模式: 提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们具体的类。抽象工厂模式又称为Kit模式,属于对象创建型模式。 抽象工厂模式和工厂方法不太一样,它要解决的问题比较复杂,不但工厂是抽象的,产品是抽象的,而且有多个产品需要创建。 需要创建的产品也是抽象的。 工厂模式:实例 -> 类 -> 类工厂 抽象工厂:实例 -> 类 -> 类工厂 -> 抽象工厂 image image

hankviv commented 4 years ago

建造者模式: 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 建造者模式是一步一步创建一个复杂的对象,它允许用户只通过指定复杂对象的类型和内容就可以构建它们,用户不需要知道内部的具体构建细节。

建造者模式包含如下角色:

image

hankviv commented 4 years ago

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

  1. 一是某个类只能有一个实例;
  2. 二是它必须自行创建这个实例;
  3. 三是它必须自行向整个系统提供这个实例。 image
    
    <?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 操作消耗的资源。对于一些需要频繁创建和销毁的对象,单例模式无疑可以提高系统的性能。
单例模式的主要优点在于提供了对唯一实例的受控访问并可以节约系统资源;其主要缺点在于因为缺少抽象层而难以扩展,且单例类职责过重。
hankviv commented 4 years ago

结构型模式 结构型模式(Structural Pattern)描述如何将类或者对 象结合在一起形成更大的结构,就像搭积木,可以通过 简单积木的组合形成复杂的、功能更为强大的结构。 包含模式:

hankviv commented 4 years ago

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

适配器模式包含如下角色: