回想了一下php的设计模式,好像记得不完全了。此处对php设计模式重新做一下复习总结。
单例模式:核心只包括一个特殊的类,保证系统中只能有一个实例,即一个类中只能有一个实例化对象,避免系统中有大量的new操作。
单例模式创建有四个要点:
1、私有化的静态属性(用于保存建立的类的实例对象),
2、私有化 的构造方法(防止从外部new生成对象),
3、私有化的克隆方法(防止外部重过clone(克隆)方法生成对象),
4、公有化的静态方法(调用当前单例类的一个入户。)
<?phpheader("Content-type:text/html;charset=utf-8");class danli{ ???static private $obj; ?//私有化的静态属性,保存实例对象 ???private function __construct(){ ?//私有化的构造方法 ???????//echo "Is New() Ok"; ???} ???private function __clone(){} ?//私有的克隆方法 ???static public function getInstanceEntry(){ ?//公有化的静态方法,外部实例对象的入口 ???????????????if(!self::$obj instanceof self){ ??//instanceof判断对象是否实例化 ???????????self::$obj = new self(); ?//或者是new danli() ???????} ???????return self::$obj; ???} ???public function getName($nn){ ???????return $nn; ???}}$t = danli::getInstanceEntry();echo $t -> getName(‘ABC‘);?>
工厂模式:就是一个类,在这个类中是一些创建对象的方法,这样我们就可以使用工厂类去创建对象而不是直接使用new,如果要修改对象类型,直接在工厂类中修改即可。
//工厂模式class gongchang{ ???static public function fact($n){ ???????if($n == 1) return new A(); ???????elseif ($n == 2) return new B(); ???????elseif ($n == ‘c‘) return new C(); ???????return new de(); ???}}Interface InstanceEntry{ ?????public function getname();}class A implements InstanceEntry{ ???private $n = "AAAAAAAA"; ???public function getname(){return $this->n;}}class B implements InstanceEntry{ ???private $n = "BBBBBBB"; ???public function getname(){return $this->n;}}class C implements InstanceEntry{ ???private $n = "CCCCCCCC"; ???public function getname(){return $this->n;}}class de implements InstanceEntry{ ???private $n = "morenjieguo"; ???public function getname(){return $this->n;}}$test = gongchang::fact(2);echo $test->getname();?>
PHP 设计模式总结
原文地址:https://www.cnblogs.com/lovele-/p/9233451.html