一、单例模式
单例模式(Singleton Pattern)是一个比较简单的模式,其定义如下:Ensure a class has only one instance, and provide a global point of access to it.(确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。)
单例模式通用类图
<?php class Singleton { private static $initial = null; //私有化构造方法 private function __construct(){ } //私有化克隆方法 private function __clone(){ } public static function Initialization(){ if(self::$initial == null){ self::$initial = new self(); } return self::$initial; } }
优点:
1. 由于单例模式在内存中只有一个实例,减少了内存开支,在一个对象需要频繁地创建、销毁时,而且创建或销毁时性能又无法优化,单例模式的优势就非常明显
2. 单例模式可以避免对资源的多重占用
3. 单例模式可以在系统设置全局的访问点,优化和共享资源访问
缺点:
1. 单例模式一般没有接口,扩展困难
2. 单例模式与单一职责原则有冲突。一个类应该只实现一个逻辑,而不关心它是否是单例的,是不是要单例取决于环境,单例模式把“要单例”和业务逻辑融合在一个类中
二、工厂方法模式
工厂方法模式。定义为:Define an interface for creating an object,but let subclasses decide which class toinstantiate.Factory Method lets a class defer instantiation to subclasses.(定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。)
工厂模式通用类图
<?php interface zoon { function introduce(); } class dog implements zoon{ function introduce(){ echo "我是小狗,我汪汪汪叫" . PHP_EOL; } } class pig implements zoon{ function introduce(){ echo "我是小猪,我哼哼哼叫" . PHP_EOL; } } class sheep implements zoon{ function introduce(){ echo "我是小羊,我咩咩咩叫" . PHP_EOL; } } interface createZoon{ function create(); } class FactoryDod implements createZoon{ function create(){ return new dog(); } } class FactoryPig implements createZoon{ function create(){ return new pig(); } } class FactorySheep implements createZoon{ function create(){ return new sheep(); } } class Factory{ function __construct(){ $d = new FactoryDod(); $d->create()->introduce(); $p = new FactoryPig(); $d->create()->introduce(); $s = new Factorysheep(); $s->create()->introduce(); } } $t = new Factory();