设计模式常用知识
设计模式常用知识
###################################################################
# 生成对象
###################################################################
# 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) 收藏 举报
浙公网安备 33010602011771号