PHP面向接口编程 耦合设计模式

php教程面向接口编程 耦合设计模式

关于接口的理解。   接口从更深层次的理解,应是定义(规范,约束)与实现(名实分离的原则)的分离。   我们在一般实现一个系统的时候,通常是将定义与实现合为一体,不加分离的,我认为最为理解的系统设计规范应是所有的定义与实现分离,尽管这可能对系统中的某些情况有点繁烦。   接口的本身反映了系统设计人员对系统的抽象理解。   接口应有两类:第一类是对一个体的抽象,它可对应为一个抽象体(abstract class);   第二类是对一个体某一方面的抽象,即形成一个抽象面(interface);   一个体有可能有多个抽象面。   抽象体与抽象面是有区别的。   2.设计接口的另一个不可忽视的因素是接口所处的环境(context,environment),系统论的观点:环境是系统要素所处的空间与外部影响因素的总和。任何接口都是在一定的环境中产生的。因此环境的定义及环境的变化对接口的影响是不容忽视的,脱离原先的环境,所有的接口将失去原有的意义。   3.按照组件的开发模型(3c),它们三者相辅相成,各司一面,浑然一体,缺一不可。   面向对象是指,我们考虑问题时,以对象为单位,考虑它的属性及方法   面向过程是指,我们考虑问题时,以一个具体的流程(事务过程)为单位,考虑它的实现   接口设计与非接口设计是针对复用技术而言的,与面向对象(过程)不是一个问题

我希望的是尽量少的修改代码,就能满足他的需要。我可以抽象如下接口:

以下为引用的内容:
package org.bromon.test;
public interface db
{
  java.sql.connection opendb(string url,string user,string password);
  void close();
}
 

这个接口只定义两个方法,没有任何有实际意义的代码,具体的代码由实作这个接口的类来给出,比如mysql教程.java:

以下为引用的内容:

package org.bromon.test;
import java.sql.*;
public class mysql implements db
{
  private string url=”jdbc:mysql:localhost:3306/test”;
  private string user=”root”;
  private string password=””;
  private connection conn;
  public connection opendb(url,user,password)
  {
    //连接数据库教程的代码
  }

  public void close()
  {
    //关闭数据库
  }
}
 

 

下面看实例

<?php
interface js{
function ys($a,$b);
}

class af implements js{

  function ys($a,$b){
     return "加法运算......结果为:".($a+$b);
   }
}

class jf implements js{

    function ys($a,$b){
    return "减法运算......结果为:".($a-$b);
    }
}
class aaf implements js{

    function ys($a,$b){
    return "乘法运算......结果为:".($a*$b);
    }
}
class jjf implements js{

    function ys($a,$b){
    return "除法运算......结果为:".($a/$b);
    }
}
class modf implements js{

    function ys($a,$b){
    return "取模运算......结果为:".($a % $b);
    }
}
class china implements js{
     public $varl=null;//这里直接:public $varl = new nothingx(); 会出错。
     function __construct(){
     $this->varl = new nothingx();
  }
     function ys($a,$b){
        return $this->varl->say();
     }
}
/*也可以用继承的方式实现哟:
class china extends nothingx implements js{
     function ys($a,$b){
     return parent::say();
     }
}
*/
class nothingx{
 function say(){
    return "我什么运算都不做...只是为了实现<font color=#990000><b>‘耦合设计模式’</b></font>...我是出来打酱油的......";
 }
}

class test{
   private $one;
   private $two;
   public function __construct($x,$y){
      $this->one=$x;
      $this->two=$y;
   echo "<font size=20px><strong>面向对象程序设计——接口</font></strong><hr>class test初始化:<br>属性$one=".$this->one."  属性$two=".$this->two."<hr>";
   }
   function display(js $a){
      return "<font color=#990000><b>用php接口技术实现的运算——开始运算啦:</b></font><hr>".$a->ys($this->one,$this->two)."<hr>";
   }
}
$t=new test(103,2);
$t1=new jf;
$t2=new china;
echo $t->display($t1);
echo $t->display($t2);
?>

好处

在小项目中,是体验不到的。使用接口编程,易于程序扩展,降低程序耦合性。
  举个常用的例子说吧,你有个方法为:public viod doxx(arraylist arraylist),方法调用时,参数必须为arraylist对象。某天,当参数需要更换为其他集合类时,必须更改代码;此时如果用接口的话,就不须了;将方法更改为public viod doxx(list list),方法调用时,参数就很灵活了,可以传入arraylist、linkedlist等等,这样从而降点耦合了。

时间: 2024-11-05 18:57:58

PHP面向接口编程 耦合设计模式的相关文章

PHP面向接口编程 耦合设计模式 简单范例

复制代码 代码如下: <?php interface js{ function ys($a,$b); } class Af implements js{ function ys($a,$b){ return "加法运算......结果为:".($a+$b); } } class Jf implements js{ function ys($a,$b){ return "减法运算......结果为:".($a-$b); } } class AAf impleme

PHP面向接口编程 耦合设计模式 简单范例_php技巧

复制代码 代码如下: <?php interface js{ function ys($a,$b); } class Af implements js{ function ys($a,$b){ return "加法运算......结果为:".($a+$b); } } class Jf implements js{ function ys($a,$b){ return "减法运算......结果为:".($a-$b); } } class AAf impleme

通过生活中例子模拟java面向接口编程实例

包括如下接口和类:   举例,比如一台电脑,主板上的PCI插槽就可以理解为现实中的接口 你可你把声卡,显卡,网卡都插在PCI插槽上,而不用担心那个插槽是专门插哪个的 原因是做主板的厂家和做各种卡的厂家都遵守了统一的规定 包括尺寸,排线等等 但是各种卡的内部实现结构是不一样的. 下面具体模拟:   通过生活中例子模拟java面向接口编程实例 package com.test; /** * 定义PCI接口,定义主板PCI插槽规范 * @author yanerkang * */ public int

.NET项目开发—浅谈面向接口编程、可测试性、单元测试、迭代重构(项目小结)

阅读目录: 1.开篇介绍  2.迭代测试.重构(强制性面向接口编程,要求代码具有可测试性) 2.1.面向接口编程的两个设计误区 2.1.1.接口的依赖倒置 2.1.2.接口对实体的抽象  2.2.迭代单元测试.重构(代码可测试) 2.2.1.LINQ表达式对单元测试的影响  1]开篇介绍 最近一段时间结束了一个小项目的开发,觉得有些好东西值得总结与分享,所以花点时间整理成文章: 大多数情况下我们都知道这些概念,面向接口编程是老生常谈的话题了,有几年编程经验的都知道怎么运用:单元测试其实在前几年不

理解面向接口编程,面向接口编程的优势,以及对系统设计的影响

问题描述 希望各位大神不吝赐教... 解决方案 解决方案二:一个人写代码无所谓,不要接口也可以(当然,某些框架非要你定义接口,这种就没办法)小系统也无所谓,随便写接口这种东西有价值的场景在:大系统,需要多人协作的系统,多人之间工作有交际,需要有调用与被调用的关系,工作开始的时候先把接口定义好,再各自实现,工作效率比较高.某些设计模式里需要用到接口.比如你将系统里的部分可以重用的功能抽取出来,但是这种重用功能里有部分又有不同,那么就可以采用定义接口的方式,把需要自定义的部分暴露出去,公共的部分抽取

[Chrome]关于面向接口编程的应用

面向接口编程,或者说是面向抽象,是OOP中有效隔离变化的手段,同时要求开发者必须对问题进行有效抽象.Chrome为了兼容AOSP WebView和Chromium Android WebView, 在实现中做了许多的抽象,充分做到了上层只依赖于接口的原则(依赖倒置),可以有效的兼容不同的WebView实现,隔离其内部的变化. 下面即为WebView到Content层的分解.刚开始读Chrome的代码,还没有细致整理,以后慢慢完善. WebViewFactory是一个顶层类(单例),WebView

架构那点事系列一 - 设计模式前章

                                        ----能够正视失败和错误,而不回避和掩盖,正是职业架构师的宝贵素养!!!       首先,我们需要明白的是何为架构,以我看来,架构更多关注的是高层设计(所谓的high-level Design),它是一组有关如何确定软件系统的组织机构的重要决策.感兴趣的朋友可以查看这篇文章来深入理解一下架构的概念(http://baike.baidu.com/view/1147116.htm?fr=ala0_1).那么,如何达到

[Unity3d]一个优秀的程序必备的几种设计模式

unity编程众所周知,它是属于脚本化,脚本没有一个具体的概念跟架构,导致在项目过程中,经常出现哪里需要实现什么功能,就随便添加脚本,结果,就造成了一片混乱,不好管理.更有甚者,自己的写的代码闲置一段时间后,再去想找某个功能的实现,都要在视图中翻来覆去找半天.哎!请容许我在此感叹一声,这还是你写的东西么? 因此,一个好的设计模式是多么的重要啊,那么,我们在使用unity3d开发东西的时候,脚本架构到底应该如何来写?呵呵...其实,我也给不了你们具体答案,因为每个人的开发习惯,每个团队的开发模式也

java设计模式六大原则之场景应用分析

看了一篇文章,感觉收获蛮大,不过还有一些不懂,收藏慢慢研究. 面对项目中如此众多的设计模式,我们有时候无法下手.在强大的设计框架也终脱离不了23种设计模式,6大原则.我们只要把内功修炼好,掌握其精髓也离我们不远了...     目录: 设计模式六大原则(1):单一职责原则 设计模式六大原则(2):里氏替换原则 设计模式六大原则(3):依赖倒置原则 设计模式六大原则(4):接口隔离原则 设计模式六大原则(5):迪米特法则 设计模式六大原则(6):开闭原则 设计模式六大原则(1):单一职责原则 设计