策略模式
处理程序算法与其他算法之间的互换
实现方式:声明一个抽象的拥有一个算法方法的基类来实现,通过继承基类的具体类来实现单例模式
解决的是如何在整个项目中创建唯一对象实例的问题
1)一个保存类的实例的静态成员变量,静态私有变量,eg: $_instance
2)构造函数–private,防止外部new类,消耗内存,单例类只能被自身实例化
3)一个访问该实例的公共静态方法,eg: getInstance()
4)创建__clone()方法防止对象被克隆
5)instanceof操作符检查三件事情:
—-实例是否某个特定的类型,
—-实例是否从某个特定的类型继承,
—-实例或者他的任何祖先类是否实现了特定的接口。
6)使用单例模式生成一个对象,供其它众多对象使用,常用于数据库连接工厂模式
工厂模式解决的是如何不通过new建立实例对象的方法
1)用于封装创建对象的过程,可根据不同的参数生成不同的类实例,减少代码的复制粘贴
2)常用于返回类似接口的不同的类,常见用法就是创建多态的提供者
3)有一个静态方法,一般命名为factory,可接受任意数量的参数,并且必须返回一个对象
4)分类:
简单工厂模式:静态工厂方法模式,定义一个用于创建对象的接口
工厂方法模式:去掉了了静态属性,可被子类继承,可有工厂子类来分担
抽象工厂模式:仅处理抽象产品角色提供的接口注册器(观察者)模式
首先,单例模式创建唯一对象的过程本身还有一种判断,即判断对象是否存在。存在则返回对象,不存在则创建对象并返回。 每次创建实例对象都要存在这么一层判断。 工厂模式更多考虑的是扩展维护的问题。
参考文档:http://weibo.com/p/230418661838ca0102vbhb
IoC容器是把 次类 实例化对象 依次 注册到 类中一个静态数组;
———Di.php——-
class Di{
protected static $objects;
static function set($key, $object){
self::$objects[$key] = $object;
}
static function get($key){
return self::$objects[$key];
}
static function unset($key){
unset(self::$objects[$key]);
}
}