设计模式常用知识

设计模式常用知识

###################################################################
# 生成对象
################################################################### 
# 1.单例模式(Singleton): 只生成一个对象实例的特殊类
#
# 效果
# 	与使用全局变量相比,使用单利模式对象效果如何?首先是一个坏消息:单例和全局变量都容易被误用。
#	因为系统中得任何地方都可以访问单例,所以它们容易引发难以调试的依赖关系。如果改变单例,那么
#	使用它的所有类可能都会受到影响。这里依赖关系自身并不是问题。毕竟,只要我们声明一个接收某种
#   类型作为参数的方法,就会建立一种依赖关系。这里的问题是,单例的全局性质允许程序员以绕过类接
#	口定义的方式访问它们。在使用单例时,依赖关系隐藏于方法后,没有体现在方法签名中。这使得我们
#   难以跟踪系统中的依赖关系。因此,我们应当小心谨慎地使用单例类。
#   尽管如此,我认为适度地使用单例模式有助于改善系统的设计,避免在系统中不必要地传递对象。
#	在面向对象设计中,单例优于全局变量,因为这样可以防止其他代码向单例写入错误类型的数据。 
class Preferences
{
	private $props = [];
	private static $instance;
	
	private function __construct()
	{
	}
	
	public static function getInstance()
	{
		if (empty(self::$instance))
		{
			self::$instance = new Preferences();
		}
		return self::$instance;
	}
	
	public function setProperty(string $key, string $val)
	{
		$this->props[$key] = $val;
	}
	
	public function getPropery(string $key) : string
	{
		return $this->props[$key]; 
	}
}
###################################################################
# 2.工厂方法(Factory Method): 构建创造者类的继承层次
###################################################################
# 3.抽象工厂(Abstract Factory): 对功能相关的产品进行分组
###################################################################
# 4.原型(Prototype): 通过克隆生成对象
###################################################################
# 5.服务定位器(Serive Locator): 向系统索要对象 
###################################################################
# 6.依赖注入(Dependency Injection): 让系统给我们对象
###################################################################

  

posted on 2020-03-14 15:22  herisson_pan  阅读(10)  评论(0)    收藏  举报

导航