中介者模式

程序员日记      2019-08-14
定义中介者(Mediator)模式的定义:定义一个中介对象来封装一系列对象之间的交互,使原有对象之间的耦合松散,且可以独立地改变它们之间的交互。中介者模式又叫调停模式,它是迪米特法则的典型应用。优点1.降低了对象之间的耦合性,使得对象易于独立地被复用。2.将对象间的一对多关联转变为一对一的关联,提高系统的灵活性,使得系统易于维护和扩展。缺点当同事类太多时,中介者的职责将很大,它会变得复杂而庞大,以至于系统难以维护。为什么需要中介者模式1.在用户与用户直接聊天的设计方案中,用户对象之间存在很强的关...
标签:
419 人看过

观察者模式

程序员日记      2019-08-13
问题引入在我们日常开发中,常常会遇到下面这样的场景1.登录成功时,需要短信通知用户登录,需要记录用户登录信息(IP,地理位置,登录时间),获取用户信息等。2.下订单成功时,需要推送消息通知客户,推送消息通知店家等等操作...这种繁琐的操作,按照面向过程的方法写,一定会使代码变得复杂,这样也违反了单一责任原则,如果这些操作可以是看作是插件按需求添加或者移除的话,登录就只需要完成它单一的操作观察者模式就是为了解决这种问题而存在的。使用场景1.当一个抽象模型有两个方面,其中一个方面依赖于另一个方面。比...
标签:
423 人看过

适配器模式

程序员日记      2019-08-13
定义将一个类的接口转换成客户希望的另外一个接口,Adapter模式使得原来由于接口不兼容而不能一起工作的那此类可以一起工作主要角色目标(Target)角色:定义客户端使用的与特定领域相关的接口,这也就是我们所期待得到的源(Adaptee)角色:需要进行适配的接口适配器(Adapter)角色:对Adaptee的接口与Target接口进行适配;适配器是本模式的核心,适配器把源接口转换成目标接口,此角色为具体类适用场景1.你想使用一个已经存在的类,而它的接口不符合你的需求2.你想创建一个可以复用的类,...
标签:
450 人看过

注册器模式

程序员日记      2019-08-13
定义单例模式保证了一个类中只有一个实例被全局访问,当你有一组全局对象被全局访问时可能就需要用到注册者模式(registry),它提供了在程序中有条理的存放并管理对象(object)一种解决方案。注册模式也称为注册器模式或者注册树模式为什么使用注册模式单例模式创建唯一对象的过程本身还有一种判断,即判断对象是否存在。存在则返回对象,不存在则创建对象并返回。每次创建实例对象都要存在这么一层判断。 工厂模式更多考虑的是扩展维护的问题。 总的来说,单例模式和工厂模式可以产生更加合理的对...
标签:
426 人看过

单例模式

程序员日记      2019-08-13
定义单例模式,是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统中一个类只有一个实例。即一个类只有一个对象实例。要点1.一个类只能有一个对象2.必须是自行创建这个类的对象3.要向整个系统提供这一个对象对于PHP来说就是以下几项:1.__construct()是私有的,只能被自身实例化2.__clone()是私有的,防止克隆3.包含一个保存类的实例的成员变量4.包含一个用于实例化的静态方法优点1.实例控制单例模式会阻止其他对象实例化其自己的单例对象的副...
标签:
466 人看过

工厂模式

程序员日记      2019-08-13
定义工厂模式的意思其实就是提供获取某个对象实例的一个接口,同时使调用代码避免确定实例化基类的步骤,实际上就是建立一个统一的类实例化的函数接口,统一调用,统一控制,它是PHP中常用的一种设计模式,一般会配合单例模式一起使用。为什么需要工厂模式1.工厂模式可以将对象的生产从直接new一个对象,改成通过调用一个工厂方法生产。这样的封装,代码若需修改new的对象时,不需修改多处new语句,只需更改生产对象方法。2.若所需实例化的对象可选择来自不同的类,可省略if-else多层判断,给工厂方法传入对应的参...
标签:
426 人看过

策略模式

程序员日记      2019-08-13
定义它定义了算法家族,分别封装起来,让他们之间可以互相替换,此模式让算法的变化不会影响到使用算法的客户。策略模式是一种定义一系列算法的方法,从概念上来看,所有这些算法完成的都是相同的工作,只是实现不同,它可以以相同的方式调用所有的算法,减少了各种算法类与使用算法类之间的耦合。事实上你可以将一个继承自抽象策略类的称为具体策略,就是策略模式中的策略1,策略2......策略模式的优点策略模式的策略抽象类层次为引用类定义了一系列的可供重用的算法或行为。继承有助于析取出这些算法的公共功能。策略模式的另一...
标签:
404 人看过