PHP 面向对象编程和设计模式 (3)
PHP高级程序设计 学习笔记 2014.06.11
设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。 毫无疑问,设计模式于己于他人于系统都是多赢的;设计模式使代码编制真正工程化;设计模式是软件工程的基石脉络,如同大厦的结构一样。
单例模式
当需要保证某个对象只能有一个实例的时候,单例模式非常有用。它把创建对象的控制权委托到一个单一的点上,任何时候应用程序都只会仅有一个实例存在。单例类不应该可以在类的外部进行实例化一个单例类应该具备以下几个要素。
必须拥有一个访问级别为 private 的构造函数,有效防止类被随意实例化。
必须拥有一个保存类的实例的静态变量。
必须拥有一个访问这个实例的公共的静态方法,该方法通常被命名为 GetInstance()。
必须拥有一个私有的空的__clone方法,防止实例被克隆复制。
下面用一个简单的单例类的例子来说明
<span>class</span><span> ClassName { </span><span>public</span> <span>static</span> <span>$_instance</span><span>; </span><span>private</span> <span>function</span><span> __construct() { </span><span>#</span><span> code...</span> <span> } </span><span>private</span> <span>function</span><span> __clone() { </span><span>#</span><span> empty</span> <span> } </span><span>public</span> <span>static</span> <span>function</span><span> GetInstance() { </span><span>if</span>(!(self::<span>$_instance</span><span> instanceof self)) { self</span>::<span>$_instance</span> = <span>new</span><span> self(); } </span><span>return</span> self::<span>$_instance</span><span>; } </span><span>public</span> <span>function</span><span> SayHi() { </span><span>echo</span> "Hi boy!"<span>; } } </span><span>$App</span>= ClassName::<span>GetInstance(); </span><span>$App</span>-><span>SayHi(); </span><span>/*</span><span>* * * Output * * Hi boy! * </span><span>*/</span>
简单工厂模式
当你有大量的实现同一接口的类的时候,在合适的时候实例化合适的类,如果把这些 new 分散到项目的各个角落,不仅会使业务逻辑变的混乱并且使得项目难以维护。这时候如果引进工厂模式的概念,就能很好的处理这个问题。我们还可以通过应用程序配置或者提供参数的形式让工厂类为我们返回合适的的实例。
工厂类,它把实例化类的过程放到各工厂类里头,专门用来创建其他类的对象。工厂模式往往配合接口一起使用,这样应用程序就不必要知道这些被实例化的类的具体细节,只要知道工厂返回的是支持某个接口的类可以很方便的使用了。下面简单举例说明下工厂类的使用。
<span>interface</span><span> ProductInterface { </span><span>public</span> <span>function</span><span> showProductInfo(); } </span><span>class</span> ProductA <span>implements</span><span> ProductInterface { </span><span>function</span><span> showProductInfo() { </span><span>echo</span> 'This is product A.'<span>; } } </span><span>class</span> ProductB <span>implements</span><span> ProductInterface { </span><span>function</span><span> showProductInfo() { </span><span>echo</span> 'This is product B.'<span>; } } </span><span>class</span><span> ProductFactory { </span><span>public</span> <span>static</span> <span>function</span> factory(<span>$ProductType</span><span>) { </span><span>$ProductType</span> = 'Product' . <span>strtoupper</span>(<span>$ProductType</span><span>); </span><span>if</span>(<span>class_exists</span>(<span>$ProductType</span><span>)) { </span><span>return</span> <span>new</span> <span>$ProductType</span><span>(); } </span><span>else</span><span> { </span><span>throw</span> <span>new</span> <span>Exception</span>("Error Processing Request", 1<span>); } } } //这里需要一个产品型号为 A 的对象 </span><span>$x</span> = ProductFactory::factory('A'<span>); </span><span>$x</span> -><span> showProductInfo(); <br />//这里需要一个产品型号为 B 的对象 </span><span>$o</span> = ProductFactory::factory('B'<span>); </span><span>$o</span> -><span> showProductInfo();<br /><br />//都可以调用showProductInfo方法,因为都实现了接口 ProductInterface. </span>?>
小结
模式就像是软件工程的基石脉络像大厦的设计图纸一样,这里接触了两种模式:单例模式和工程模式。单例类中存在一个静态变量保存着自身的一个实例,并且提供了获取这个静态变量的静态方法。单例类还应该把构造函数和clone函数标记为私有的,防止破换实例的唯一性。工厂模式根据传入的参数或程序的配置来创建不同的类型实例,工厂类返回的是对象,工厂类在多态性编程实践中是至关重要的。

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











이번 장에서는 CakePHP의 환경 변수, 일반 구성, 데이터베이스 구성, 이메일 구성에 대해 알아봅니다.

PHP 8.4는 상당한 양의 기능 중단 및 제거를 통해 몇 가지 새로운 기능, 보안 개선 및 성능 개선을 제공합니다. 이 가이드에서는 Ubuntu, Debian 또는 해당 파생 제품에서 PHP 8.4를 설치하거나 PHP 8.4로 업그레이드하는 방법을 설명합니다.

CakePHP는 PHP용 오픈 소스 프레임워크입니다. 이는 애플리케이션을 훨씬 쉽게 개발, 배포 및 유지 관리할 수 있도록 하기 위한 것입니다. CakePHP는 강력하고 이해하기 쉬운 MVC와 유사한 아키텍처를 기반으로 합니다. 모델, 뷰 및 컨트롤러 gu

VS Code라고도 알려진 Visual Studio Code는 모든 주요 운영 체제에서 사용할 수 있는 무료 소스 코드 편집기 또는 통합 개발 환경(IDE)입니다. 다양한 프로그래밍 언어에 대한 대규모 확장 모음을 통해 VS Code는
