设计模式
程序员面试那点事儿
互联网大厂校招、社招面试官,多年互联网大厂工作经验,分享校招、社招面试题、职场相关内容,互相交流经验
展开
-
学习导航
PHP设计模式原创 2021-01-06 21:56:59 · 68 阅读 · 0 评论 -
组合模式详解
定义将对象组合成树形结构以表示部分-整体的层次结构,使客户端对单个对象喝组合对象保持一致的方式处理类型结构型适用场景希望客户端可以忽略组合对象与单个对象的差异时处理一个树形结构时优点清楚的定义分层次的复杂对象,表示对象的全部或者部分层次让客户端忽略了层次的差异,方便对整个层次结构进行控制简化客户端代码,符合开闭原则缺点限制类型时会较为复杂使设计变得更加抽象示例代码示例1示例2UML应用场景...原创 2021-06-21 08:17:43 · 523 阅读 · 0 评论 -
建造者模式
文章目录定义类型适用场景优点缺点示例代码UML应用场景定义将一个复杂对象的构建于它的表示分离,使得同样的构建过程可以创建不同的表示,用户只需要指定建造的类型就可以得到它们,建造过程的细节不需要知道类型创建型适用场景如果一个对象有非常复杂的内部结构 很多属性想把复杂对象的创建和使用分离优点封装性好,创建和使用分离扩展性好,建造类之间独立,一定程度上解耦缺点产生多余的Builder对象产品内部发生变化,建造者都要修改,成本较大示例代码UML应用场景...原创 2021-04-16 09:31:35 · 568 阅读 · 0 评论 -
抽象工厂
文章目录定义类型使用场景优点缺点示例代码UML应用场景ConnectionSqlSessionFactory定义提供一个创建一系列相关或相互依赖对象的接口无须指定具体的类类型创建型使用场景客户端不依赖产品类实例如何被创建,实现等细节强调一系列相关的产品对象(属于同一产品族)一起使用创建对象需要大量重复的代码提供了一个产品类的库,所有的产品以同样的接口出现,从而使客户端不依赖于具体实现优点具体产品在应用层代码隔离,无须关心创建细节将一个系列的产品族统一到一起创建缺点规定了原创 2021-04-16 07:38:45 · 696 阅读 · 0 评论 -
工厂方法
文章目录定义类型适用场景优点缺点示例代码UML应用场景Collection和ArrayListURLStream定义定义一个创建对象的接口,但让实现这个接口的类来决定实现化哪个类,工厂方法让类的实例化推迟到了子类中进行类型创建型适用场景创建对象需要大量重复的代码客户端(应用层)不依赖于产品类实例如何被创建,实现等细节一个类通过其子类来指定创建哪个对象优点用户只需要关心所需产品对应的工厂,无需关心创建细节加入新产品符合开闭原则,提高可扩展性缺点类的个数容易过多,增加了复杂度原创 2021-04-14 08:55:05 · 352 阅读 · 0 评论 -
简单工厂模式
文章目录定义类型使用场景优点缺点示例代码UML类图定义一个工厂对象决定创建出哪一种产品类的实例类型创建性使用场景工厂类负责创建的对象比较少客户端只知道传入工厂类的参数,对于创建对象不关心优点只需要传入一个正常的参数,就可以获取你所需要的对象而无需知道其创建细节缺点工厂类的职责相对过重,增加新的产品,需要修改工厂类的判断逻辑,违背开闭原则示例代码public abstract class Video { public abstract void produce();}原创 2021-04-13 21:55:34 · 375 阅读 · 0 评论 -
单例模式的9种实现
一 单例是什么 保证一个类只有一个实例,并提供一个全局访问点,单例属于创建型设计模式,重点关注私有构造器、线程安全、延迟加载、序列化和反序列化安全、反射二 单例实现 1 懒汉式单例 通过加锁的方式,实现多线程下的线程安全,Debug的时候务必开启断点线程调试Threadpublic class LazySingleton { p...原创 2019-02-28 11:13:39 · 173 阅读 · 0 评论 -
PHP设计模式
工厂模式 工厂方法或类生成对象,而不是直接在代码中new单例模式 使某个类仅创建一次,防止数据库的连接多次,造成资源浪费 声明非公开的成员属性,用户判断 构造方法私有化 声明静态的公有方法,来实例对象 protected $db private function __construct(){} static function getInstace(){ if(self::$db){ retu...原创 2018-03-06 07:44:05 · 265 阅读 · 0 评论 -
PHP模版引擎原理
//template存放模版源文件//模版编译工具类Compline.class.php<?php /*** 模板编译工具类*/class Compile{ private $template; //带编译文件 private $content; //需要替换的文本 private $comfile; ...原创 2018-03-16 11:22:58 · 230 阅读 · 0 评论 -
PHP数据对象映射模式
将对象和数据存储映射起来,对一个对象的操作映射为对数据存储的操作。例如在代码中new 一个对象,使用数组对象映射模式可以将对象的一些操作,比如设置一些属性,就会自动保存到数据库,跟数据库表的一条记录对应起来在代码中实现数据对象映射模式,我们将实现一个ORM类,将复杂的SQL语句映射成对象属性的操作。同时结合工厂模式和注册模式使用例1 【例1】数据库 test ,user 表结构:CREATE TA...原创 2018-03-16 11:01:02 · 768 阅读 · 0 评论 -
PHP观察者模式
观察者模式 当一个对象的状态发生改变时,依赖他的对象会全部收到通知,并自动更新场景:当一个事件发生后,要执行一连串更新操作,传统的编程方式,就是在事件的代码之后直接加入处理逻辑,当更新逻辑增多之后,代码变得难以维护,这种方式是耦合式的,侵入式的,增加新的逻辑需要改变事件主题的代码观察者模式实现了低耦合,非侵入式的通知与更新abstract class EventGenerator{ pr...原创 2018-03-16 10:47:18 · 1164 阅读 · 0 评论 -
PHP的ArrayAccess接口详解
数组式访问接口,该接口的作用是提供像访问数组一样访问对象的能力ArrayAccess { // 获取一个偏移位置的值 abstract public mixed offsetGet ( mixed $offset ) // 设置一个偏移位置的值 abstract public void offsetSet ( mixed $offset , mixed $v...原创 2018-03-16 10:09:22 · 618 阅读 · 0 评论 -
PHP策略模式
策略模式(Strategy Pattern)策略模式是对象的行为模式,用意是对一组算法的封装。动态的选择需要的算法并使用。策略模式指的是程序中涉及决策控制的一种模式。策略模式功能非常强大,因为这个设计模式本身的核心思想就是面向对象编程的多形性思想。策略模式的三个角色:1.抽象策略角色2.具体策略角色3.环境角色(对抽象策略角色的引用)实现步骤:1.定义抽象角色类(定义好各个实现的共同抽象方法)2....原创 2018-03-15 18:08:27 · 132 阅读 · 0 评论 -
PHP迭代器模式
迭代器:类继承PHP的Iterator操作,批量操作 1 迭代器模式 在不需要了解内部实现的前提下,遍历一个聚合对象的内部元素 2 相比传统的变成模式,迭代器模式可以隐藏遍历元素的所需操作 3 允许对象以自己的方式迭代内部的数据,从而使它可以被循环访问接口IteratorIterator extends Traversable { //返回当前索引游标指向的元素 ...原创 2018-03-16 09:43:47 · 237 阅读 · 0 评论