学习设计模式原则之依赖倒置原则,代码笔记

来源:互联网 发布:手机桌面天气预报软件 编辑:程序博客网 时间:2024/06/05 11:08

1初步

<?php//学习设计模式之依赖倒置原则header("content-type:text/html;charset=utf8");echo "设计模式-依赖倒置原则<br/>";//小明要吃米饭/*** */ class Man {   public function eat()   {      echo "小明开始吃米饭了";   } } //下面是客户端测试代码 $xiaoming = new Man; $xiaoming->eat();?>


输出:小明开始吃米饭了

2 抽象吃饭

<?php//学习设计模式之依赖倒置原则header("content-type:text/html;charset=utf8");echo "设计模式-依赖倒置原则<br/>"; class Man {   //人只有一个功能:吃饭   public function chifan(EatRice $eatRice)   {      $eatRice->eat();   } } class EatRice {   public function eat(){      echo "吃米饭了";   } } $xiaoming = new Man; $xiaoming->chifan(new EatRice);


设计模式-依赖倒置原则

吃米饭了

3 小明尝试吃别的

<?php//学习设计模式之依赖倒置原则header("content-type:text/html;charset=utf8");echo "设计模式-依赖倒置原则<br/>";class Man{   //人只有一个功能:吃饭   public function chifan(EatRice $eatRice)   {      $eatRice->eat();   }}class EatRice{   public function eat(){      echo "吃米饭了";   }}/*代码完美运行,现在,小明想吃面条了,好的,吃面条的逻辑抽象出来,产生吃面条的类*//*** */class EatNoddles{   public function eat()   {      echo "吃面条了";   }}$xiaoming = new Man;$xiaoming->chifan(new EatRice);

<?php//学习设计模式之依赖倒置原则header("content-type:text/html;charset=utf8");echo "设计模式-依赖倒置原则<br/>";class Man{   //人只有一个功能:吃饭   public function chifan(EatRice $eatRice)   {      $eatRice->eat();   }}class EatRice{   public function eat(){      echo "吃米饭了";   }}/*代码完美运行,现在,小明想吃面条了,好的,吃面条的逻辑抽象出来,产生吃面条的类*//*** */class EatNoddles{   public function eat()   {      echo "吃面条了";   }}$xiaoming = new Man;$xiaoming->chifan(new EatRice);


设计模式-依赖倒置原则
吃米饭了

/*但是我们无法让小明吃面条,如果给Man类的chifan方法传入EatNoddles $eatNodlles 仍旧会输出“吃米饭了”,因为Man类的chifan方法中写死了$eatRice->chifan(),只能去实例化eatRice类的chifan方法,但是小明不可能天天吃面条,怎么办呢,用接口解决*/


4 利用接口实现

<?php//学习设计模式之依赖倒置原则header("content-type:text/html;charset=utf8");echo "设计模式-依赖倒置原则<br/>";/*但是我们无法让小明吃面条,如果给Man类的chifan方法传入EatNoddles $eatNodlles 仍旧会输出“吃米饭了”,因为Man类的chifan方法中写死了$eatRice->chifan(),只能去实例化eatRice类的chifan方法,但是小明不可能天天吃面条,怎么办呢,用接口解决*//*我们先来定义一个饭的接口*/interface Food{   //是饭就能被吃   public function eat();}/*下面先做个面条的类,面条类实现了interface Food,他必须有个方法eat*/class Noddles implements Food{   public function eat()   {      echo "吃面条了";   }}/*再做一个烤肉类,和面条类一样*/class Barbecue implements Food{   public function eat()   {      echo "吃烤肉了";   }}/*再做一个汉堡类,同上*/class Hamburger implements Food{   public function eat()   {      echo "吃汉堡了";   }}/*再做一个米饭类,同上*/class Rice implements Food{   public function eat()   {      echo "吃米饭了";   }}/*我们来定义一个chifan的interface接口*/interface Chifan{   //chifan的interface只需要有一个功能约束吃饭,而不用管吃什么饭   public function chifan(Food $food);}/*下面我们做个Man,有吃的功能*/class Man implements Chifan{   public function chifan(Food $food)   {      $food->eat();   }}/*终于要开吃了*/$xiaoming = new Man;//吃米饭$xiaoming->chifan(new Rice);//吃汉堡$xiaoming->chifan(new Hamburger);//吃烤肉$xiaoming->chifan(new Barbecue);//吃面条$xiaoming->chifan(new Noddles);/*代码完美执行,从现在开始,小明想吃什么,只需要做个这种食物的类,实现food接口就可以了*/?>


输出:

设计模式-依赖倒置原则
吃米饭了吃汉堡了吃烤肉了吃面条了


0 0