宝哥软件园

PHP面向对象学习笔记二生成对象的设计模式

编辑:宝哥软件园 来源:互联网 时间:2021-10-08

I. Singleton模式如果应用程序一次只包含一个对象,那么这个对象就是一个实例。它用于替换全局变量。复制代码如下:PHP require _ once(' db . PHP ');class DatabaSe connection { STRONG SPAN style=' color : # ff 0000 '公共静态函数get()/SPAN/STRONG { static $ db=null;if($ db==null)$ db=new database connection();返回$ db} private $ _ handle=nullSTRONG SPAN style=' COLOR : # ff 0000 ' private function _ _ construct()/SPAN/STRONG { $ DSN=' MySQL ://root :[email protected]/photos ';$ this-_ handle=db : connect($ DSN,array());} public function handle(){ return $ this-_ handle;} }打印(' Handle=' . databaseconnection : get()-Handle()。 n ');print(' Handle=' . databaseconnection : get()-Handle()。 n ');2.工厂方法: 1要解决的问题。要生成的对象类型在代码运行之前是未知的;2.对象类型可能需要扩展新产品类型;3每种产品类型可以定制特定功能;方法模式将创建者类与要生产的产品类分开。创建者是一个工厂类,它定义了生成产品对象的类方法。如果没有提供默认实现,创建者类的子类将执行实例化。通常,创建者类的每个子类实例化一个相应的产品子类。工厂模式的优势在于创建对象。它的任务是封装创建对象的过程,然后返回所需的新类。如果想要改变对象的结构和构建方式,只需要选择对象工厂,只需要更改一次代码。(Factory模式功能强大,处于应用的底层,所以会在很多其他复杂的模式和应用中不断出现。)不同的处理对象,内部自动分流处理,但对于用户来说,只有一种方法,用界面模式练习工厂模式简单方便。复制代码如下:接口Hello {函数Say _ Hello();}类英语实现Hello{公共函数say _ Hello(){ echo ' Hello!};}}类中文实现hello {public函数say _ hello(){ echo ' hello ';} } class speak { public static function factory($ type){ if($ type==1)$ temp=new English();否则if($ type==2)$ temp=new Chinese();else{ die('不支持!');}返回$ temp} } $ test=speak : factory(1);$ test-say _ hello();在简单的设计模式中,以上称为工厂方法模式,因为工厂必须能够区分所有要生产的产品。如果有新产品,必须对工厂进行相应的修改,增加相应的业务逻辑或判断。工厂方法模式的一个标志是静态方法实现工厂生产功能。(不简单)Factory方法模式: Factory方法是抽象类或接口,具体工厂实现这个方法(接口)。让消费者调用创建一个特定的产品对象(每个产品都有对应的特定工厂)。这是重写的hello副本代码。代码如下: //抽象工厂接口音箱{ function assign speaker();}//特定工厂1类英语音箱实现音箱{ public function assign speaker(){ return new English();} }//特定工厂2类中文扬声器实现扬声器{ public function assign speaker(){ return new Chinese();} }//抽象产品界面hello {函数say _ hello();}//具体产品1类英语实现hello {公共函数say _ hello(){ echo ' hello!};} }//具体产品2类中文实现hello {公共函数say _ hello(){ echo ' hello ';}}使用:复制代码如下: if(!空($ _ GET[' t ']){ switch($ _ GET[' t ']){ case 1: $ temp=new English speaker();打破;case 2: $ temp=new Chinese speaker();打破;} $ man=$ temp-assignSpeaker();$ man-say _ hello();}三。摘要工厂产品系列;每个实体工厂负责一个产品系列的产品(1,2.),每个产品系列又分为几个不同的类别(A、B.).看某个实体工厂,其实就是工厂方法模式

如果上面的你好例子,又多出来表达方式,正常和歌唱式表达(2个产品族)复制代码代码如下: //抽象工厂抽象类扬声器{ const NORMAL=1;const SING=2;抽象函数assignSpeaker($ flag _ int);} //具体工厂一类英语扬声器扩展speaker { public function assignSpeaker($ flag _ int){ switch($ flag _ int){ case self : normal : return new normal English();打破;表壳自检:3360:返回新的SingEnglish();打破;} } } //具体工厂2类说中文的扩展了扬声器{ public function assignSpeaker($ flag _ int){ switch($ flag _ int){ case self :3360 normal : return new normal Chinese();打破;表壳自检:3360:返回新唱中文();打破;} } } //抽象产品接口你好函数say _ Hello();} //具体产品一流的类普通英语实现你好公共函数say_hello(){ echo 'Hello!';} } //具体产品B1类普通汉语实现你好公共函数say_hello(){ echo '你好!';} } //具体产品主动脉第二声类单英语实现你好公共函数say_hello(){ echo '哦,铃儿响叮当,铃儿响叮当,你好!你好!"你好!";} } //具体产品B2类单中文实现你好公共函数say_hello(){ echo '叮叮当,叮叮当,你好!你好!你好!';} } 使用: 复制代码代码如下: //根据程序的业务逻辑确定具体工厂switch($ _ GET[' language ']){ case 1: $ temp=new English speaker();打破;case 2: $ temp=新中文说话人();打破;} //根据程序的业务逻辑确定具体产品,无需关心是哪个具体工厂了,维护性提高$ man=$ temp-assignSpeaker($ _ GET[' style ']);//使用产品,无需关心是哪个具体产品$ man-say _ hello();四。原型模式(原型)使用克隆来复制已存在的具体产品,然后具体产品类本身就成为他们自己生成的基础。

更多资讯
游戏推荐
更多+