zoukankan      html  css  js  c++  java
  • PHP设计模式

    三种基础设计模式

    注册模式: 注册类,可以用于全局调用

    工厂模式:用于创建对象。好处:如果被调用的对象需要进行修改,那么使用工厂模式便只修改一个地方就好

    单例模式:不重复new 对象

    适配器模式

    1、适配器模式,可以将截然不同的函数接口封装成统一的API

    2、实际应用举例,php的数据库操作有mysql,mysqli,pdo3种可以用适配器模式统一成一致。类似的场景还有cache适配器,将memcache,redis,file,apc等不同的缓存函数统一成一致

    3、注意的是,代码说的不够完全,还需要进行封装、改

    策略模式

    1、策略模式,将一组特定的行为和算法封装成类,以适应某些特定的上下文环境,这种模式就是策略模式 2、实际应用举例,假如一个电商网站系统,针对男性女性用户要各自跳转到不同的商品类名,并且所有广告位展示不同的广告,传统的做法是加入if...else... 判断。 如果新增加一种用户类型,只需要新增加一种策略即可``

    数据对象映射模式

    1、数据对象映射模式,是将对象和数据存储起来,对一个对象的操作会映射为对数据存储的操作

    2、在代码钟实现数据对象映射模式,我们将试下ORM类,将复杂的sql语句映射成对象属性的操作

    3、结合是哟弄个数据对象映射模式,工厂模式,注册模式

    4、访问对象属性的时候就修改当前记录对象的数据库记录

    观察者模式

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

    2、场景:一个事件发生后,要执行一连串更新操作。传统的编程方式,就是在事件的代码之后直接加入处理逻辑。当更新的逻辑增多之后,代码会边得难以维护。这种方式是耦合的,侵入式的,增加新的逻辑需要修改事件主题的代码

    3、观察者模式实现了低耦合,非侵入式的通知与更新机制

    原型模式

    1、与工厂模式作用类似,都是用来创建对象

    2、与工厂模式的实现不同,原型模式是先创建好一个原型对象,然后通过clone原型对象来创建新的对象。这样就免去了类创建时重复的初始化操作

    3、原型模式适用于大对象的创建,创建一个大对象需要很大的开销,如果每次new就会消耗很大,原型模式仅需内存拷贝即可

    装饰器模式

    1、装饰器模式(Decorator),可以动态地添加修改类的功能

    2、一个类提供了一项功能,如果要在修改并添加额外的功能,传统的编程模式,需要写一个子类继承它,并重新实现类的方法

    使用装饰器模式,仅需在运行时添加一个装饰器对象即可实现,可以实现最大的灵活性

    迭代器模式

    1、迭代器模式,在不需要了解内部实现的前提下,遍历一个聚合对象的内部元素

    2、相比传统的编程模式,迭代器模式可以隐藏遍历元素所需的操作

    3、 应用场景 遍历数据库表,拿到所有的user对象,然后用佛 foreach 循环,在循环的过程中修改某些字

    4、如果一个对象是一个集合,比如数据结果集。 我们通常需要逐个取出每一个元素,如果想用foreach逐个取出的话,集合类需要继承迭代器接口,实现接口中的方法,才可以被foreach迭代。 迭代器模式其实就是可使用foreach模式

    代理模式

    1、 在客户端与实体之间建立一个代理对象(proxy),客户端对实体进行的操作全部委派给代理对象,隐藏实体的具体实现细节。

    2、 Proxy还可以与业务代码分离,部署到另外的服务器,业务代码中通过RPC来委派任务。

    3、示例:读写分离

    面向对象编程的基本原则

    1、单一职责:一个类,只需做好一件事请。

    2、开放封闭:一个类,应该时可扩展的,而不可修改的。

    3、依赖倒置:一个类,不应该强依赖另外一个类。每个类对于另外一个类都是可替换的。

    4、配置化:尽可能地使用配置,而不是硬编码

    5、面向接口编程:只需要关心接口,不需要关心实现。

    配置与设计模式

    1、PHP中使用ArrayAccess实现配置文件的加载

    2、在工厂方法中读取配置,生成可配置化的对象

    3、使用装饰器模式实现权限验证,模板渲染,JSON串化

    4、使用观察者模式实现数据更新事件的一系列更新操作

    5、使用代理模式实现数据库的主从自动切换

  • 相关阅读:
    【代码笔记】iOS-书架页面
    iOS-@inerface的11条规范写法
    (转)iOS-蓝牙学习资源博文收集
    iOS App启动图不显示的解决办法.
    理解点击屏幕的事件响应--->对- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event方法的理解
    理解点击屏幕的事件响应--->对UIView的hitTest: withEvent: 方法的理解
    iOS GCD中级篇
    iOS开发UI篇—自定义layer
    iOS开发UI篇—CALayer
    iOS-绘制图层-CALayer的属性
  • 原文地址:https://www.cnblogs.com/burningc/p/9521228.html
Copyright © 2011-2022 走看看