美文网首页
设计模式(单例模式、工厂模式、观察者模式)

设计模式(单例模式、工厂模式、观察者模式)

作者: 青青玉立 | 来源:发表于2018-03-28 09:53 被阅读0次

设计模式中类之间的关系:

    面向对象设计模式中,类与类之间主要有6种关系,他们分别是:依赖、关联、聚合、组合、继承、实现。他们的耦合度依次增强

一、 单例模式

    1.单例模式 实例化出来的对象是唯一的

        1). $_instance必须声明为静态的私有变量

        2). 构造函数和析构函数必须声明为私有,防止外部程序new 类从而失去单例模式的意义

        3). getInstance()方法必须设置为公有的,必须调用此方法 以返回实例的一个引用

        4). ::操作符只能访问静态变量和静态函数

        5). new对象都会消耗内存

        6). 使用场景:最常用的地方是数据库连接。

        7). 使用单例模式生成一个对象后, 该对象可以被其它众多对象所使用。

        8). 私有的__clone()方法防止克隆对象

    2. 单例模式分3种:懒汉式单例、饿汉式单例、登记式单例

    3. 代码

    class Singlemodel{

    /**

        * 保存Singlemodel实例的变量

       * @var Singlemodel $_instance

    */

    private static $_instance = null;

        /**

        * 屏蔽掉通过new来实例化该对象

       */

    private function __construct(){

            //空函数就行

      }

    /**

        * 屏蔽掉通过clone来克隆该对象

      */

    private function __clone(){

            //空函数就行

      }

    /**

        * 通过该方法获取实例,防止多次实例化

       */

    public static function getInstance(){

        if(!(self::$_instance instanceof self)){

            self::$_instance = new self();

       }

        return self::$_instance;

    }

}

    二、.观察者模式

        1. 特点

            1):观察者模式(Observer),当一个对象状态发生变化时,依赖它的对象全部会收到通知,并自动更新

            2):场景:一个事件发生后,要执行一连串更新操作。传统的编程方式,就是在事件的代码之后直接加入处理的逻辑。

当更新的逻辑增多之后,代码会变得难以维护。这种方式是耦合的,侵入式的,增加新的逻辑需要修改事件的主体代码

            3):观察者模式为您提供了避免组件之间紧密耦合的一种方法

            4). 观察者可以向主题注册和解除注册,主题状态改变通过注册的观察者接口通知观察者,让观察者做相应的业务

       2. 场景

         典型的:用户注册(验证邮件,用户信息激活),购物网站下单时邮件/短信通知等

三、工厂模式

    1. 优点

    1). 在创建对象上 把创建对象的过程封装起来 减少代码进行复制粘帖,耦合关系重,牵一发动其他部分代码

    2). 可以根据不同的参数生成不同的类实例,那么就符合工厂模式的设计思想

2. 应用

    1). 支付接口的时候,可能对应不同的支付网关:支付宝、财付通、网银在线等。方便未来扩展,设计成工厂模式。

        定一个专门生产网关接口的工厂,抽象出来,做成接口形式,让所有的子类都要实现它的接口。

以后加一个支付方式,要使用哪一种支付方式,改变一下参数即可

    2). 在为用户注册的时候,分为很多种角色的用户。比如册用户,匿名用户、管理员用户等。

        完全使用可以使用工厂的思想来实现,代码也容易维护,为每种角色可以生成操作的类

3. 代码

interface IUser

{

        function getName();

}

class User implements IUser

{

    public function __construct( $id ) { }

    public function getName()

    {

        return "Jack";

    }

}

     #UserFactory 工厂类

  class UserFactory

{

public static function Create( $id )

{

        return new User( $id );

}

}

$uo = UserFactory::Create( 1 );

echo( $uo->getName()."\n" );

?>

相关文章

  • 设计模式

    常用的设计模式有,单例设计模式、观察者设计模式、工厂设计模式、装饰设计模式、代理设计模式,模板设计模式等等。 单例...

  • 设计模式系列-抽象工厂模式

    JAVA设计模式系列: 单例模式 观察者模式 模板方法模式 简单工厂模式 抽象工厂模式 抽象工厂模式 定义 抽象工...

  • 设计模式系列-简单工厂模式

    JAVA设计模式系列: 单例模式 观察者模式 模板方法模式 简单工厂模式 定义 简单工厂模式又叫做静态工厂方法模式...

  • iOS面试

    常用的设计模式 •单例模式 •组合模式 •观察者模式 •代理模式 •享元模式 •工厂方法模式 •抽象工厂模式 #M...

  • 面向对象设计模式-6大原则

    什么是设计模式? iOS内平时有很多设计模式,如:delegate,单例模式,观察者模式,工厂模式…… 设计模式是...

  • iOS单例模式

    1 单例模式 它是一种设计模式(常见的设计模式有:观察者模式、工厂模式、门面模式等)。单例设计模式中,一个类只有一...

  • 设计模式学习笔记——java中常用的设计模式

    单例设计模式(Singleton Pattern) 观察者模式(Observer Pattern) 工厂模式(Fa...

  • 面试 (七) : 其他篇 -- 设计模式

    常用的设计模式 • 单例模式 • 组合模式 • 观察者模式 • 代理模式 • 享元模式 • 工厂方法模式 • 抽象...

  • iOS知识点总结

    一、设计模式:MVC模式、单例模式、观察者模式、MVVM模式、工厂模式、代理模式、策略模式、适配器模式、模板模式、...

  • 6. iOS面试题其他篇1

    常用的设计模式 单例模式 组合模式 观察者模式 代理模式 享元模式 工厂方法模式 抽象工厂模式 MVC的理解 数据...

网友评论

      本文标题:设计模式(单例模式、工厂模式、观察者模式)

      本文链接:https://www.haomeiwen.com/subject/xyqycftx.html