php设计模式学习记录(上)

来源:互联网 发布:网络道德存在的问题 编辑:程序博客网 时间:2024/05/22 08:26

        从事php后台的开发已经一年多了,慢慢的对CI等php框架有了越来越深入的了解,而开发的项目也是建立在php的框架之上,渐渐对底层的一些设计模式没有多少概念,最近在学习php的设计模式,发现框架其实是对大多的这些设计模式进行封装,同时又有些设计模式没有被利用,今天我就来给大家分享这几天学习php设计模式的一些心得。

1.工厂模式

工厂模式,顾名思义,将重复的操作封装到一个类一个方法里,一个是利于代码的复用性,也同时降低了代码维护的成本。以下贴出其简单的代码实例:

<span style="font-size:18px;"><?phpclass Factory {static function createDatabase(){$db = new Database;return $db;}}//项目中代码中引用方法Factory::createDatabase();?></span>

2.单例模式

这种设计模式,可以配合工厂模式使用,设想这样一个应用场景,class Database,封装了数据的操作方法,而我们的业务逻辑中,几乎每一个地方都会使用到链接数据库的操作,传统的做法中,我们会不断的$db = new Database;

这样对服务器带来不小的开销。因此对于这样频用的类,不允许多次创建,而是只允许创建一次,复用对象。

<?phpclass Database{protected $db;//关闭Database new的创建方式private function __construct(){}//获得database对象的唯一入口static function getInstance(){if(self::$db)return self::$db;else {self::$db = new self();return self::$db;}}}?>
3.注册树模式

类似上面的两种设计模式,也是为了减少对象的创建,降低服务器的压力。在注册树模式当中,我们建议,将所有创建过的对象存储起来,我们可以在接下来的业务逻辑中,自由的调用。

<?phpclass Register{protected static $objects;static function set($alias, $object){self::$objects[$alias] = $objecct;}static function get($name){return self::$objects[$alias];}static function _unset($alias){unset(self::$objects[$alias]);}}?>
4.策略模式

这种设计模式,改变了在业务逻辑开发中,繁琐的if...else的使用,假设这样一个场景:在某个业务逻辑中,我们需要对不同身份的用户提供不同样的业务展示,那么我们需要使用if..else的语法来区分开不同身份,那么,如果身份的增加在代码的实现上,整个设计就会变得复杂而失逻辑。那么让我们看看策略模式吧

1)首先呈现不同的业务,但是符合相同的接口

interface UserStrategy{function showAd();function showLink();}
2) 根据不同的身份编写不同的接口(此处身份就以男性、女性为例)
<?phpclass FemaleUserStrategy implements UserStrategy{function showAd(){echo "2015新款女装";}function showLink(){echo "www.taobao.com";}}?>
<?phpclass MaleUserStrategy implements UserStrategy{function showAd(){echo "Ipad";}function showLink(){echo "www.jd.com";}}?>
3)统一调度方式

<?phpclass Page{protected $strategy;function index(){echo "AD:";$this -> strategy ->showAd(); echo  "Link:"$this -> strategy ->showLink(); }}$page = new Page;if (isset($_GET['female'])){$strategy = new FemaleUserStrategy();}else {$strategy = new MaleUserStrategy();}?>






0 0