search
HomeBackend DevelopmentPHP TutorialUnderstanding PHP Coupling Design Pattern_PHP Tutorial

一个软件,它具有许多类,类与类之间需要互相调用,一旦某个类与另一个类具有紧密耦合关系的时候,这个软件的重用性就会大大降低。所以一个软件的重用性的高低就取决于它的耦合程度的高低。

耦合度:程序模块之间的关联、依赖程度。

在设计过程中提出:当设计这个软件的体系结构的时候,就发现了这个软件的逻辑运行部分(SimpleRouter类)和输出部分(SimpleRouterFrame类)不能很好的结合起来。即:我们不得不将程序界面的引用(reference to SimpleRouterFrame)一层一层的传递给程序的核心部分,以提供输出功能。

在开发过程中提出:当我们对输出界面(SimpleRouterFrame类)进行了一些修改后,特别是某些方法名称修改后,相应程序核心部分(SimpleRouter类)的代码也需要重新修改以适应这个新的输出界面。

问题的原因:类与类之间耦合的过于紧密,以至于每次需要修改一个类,它相应的关联类都需要修改代码来适应这个修改过的类。 比如说:某个类A需要直接显示的调用另一个类B的public方法,一旦B不再支持这个方法,或者重写了这个方法名称,A就需要重新编写代码来适应。另一种情况:某类A需要用到具有某种特定方法的类B,但B的形式并不确定,一旦B的内部结构改变,A就可能需要重写代码。

为避免这种情况,需要降低A与B之间的耦合度,不论形式如何,只要B仍然能够实现A所需要的功能,A就不需要重写代码, 解决方法:令B实现某种接口I,定义 I.Method(); 同时A在调用B的方法时候直接调用I的方法即可;而从前会将B当作参数传给A,然后A再调用B的方法的地方

{   
    A.AMethod( B b ) {   
    	b.BMethod();   
    	/*….*/   
  	}   
}   

修改成:

{   
    A.AMethod( I i ) {   
    	i.Method();   
	}   
}   

在这里,B只需要实现I.Method()方法即可,完全隐藏了实现细节。 按照这种方法,既实现了类与类之间的松散耦合,大大增强了类的可重用性。回顾从前学过的设计模式,可以发现,这与Observer模式有相似之处。

下面是一个完整的例子:

<?php
interface Calculation {
	function compute($a, $b);
}
class Addition implements Calculation {
	function compute($a, $b)
	{
		return "加法运算结果为:".($a+$b);
	}
}
class Subtraction implements Calculation {
    function compute($a, $b)
	{
    	return "减法运算结果为:".($a-$b);
    }
}
class Multiplication implements Calculation {
    function compute($a, $b)
	{
    	return "乘法运算结果为:".($a*$b);
    }
}
class Division implements Calculation{
    function compute($a, $b)
	{
    	return "除法运算结果为:".($a/$b);
    }
}
class Modf implements Calculation {
    function compute($a, $b)
	{
    	return "取模运算结果为:".($a % $b);
    }
}
class Coupling implements Calculation {
	//这里直接:public $varl = new LazyDog(); 会出错。
	public $varl = null;
	
	function __construct()
	{
     	$this->varl = new LazyDog();
  	}
	
	function compute($a, $b)
	{
		return $this->varl->say();
	}
}
/*也可以用继承的方式实现哟:
class Coupling extends LazyDog implements Calculation {
	function compute($a, $b)
	{
		return parent::say();
	}
}
*/
class LazyDog {
	function say()
	{
    	return "我什么运算都不做...只是为了实现'耦合设计模式'...我是出来打酱油的......";
	}
}
class Test {
	private $one;
	private $two;
	public function __construct($x,$y)
	{
		$this->one=$x;
		$this->two=$y;
   		echo "Class Test 初始化:属性\$one=".$this->one.",属性\$two=".$this->two."<hr />";
   } 
   function display(Calculation $a){
		return "用PHP接口技术实现的运算:".$a->compute($this->one,$this->two)."<hr />";
   }
}
$t = new Test(96,12);
$t1 = new Addition();
$t2 = new Subtraction();
$t3 = new Multiplication();
$t4 = new Division();
$t5 = new Modf();
$dog = new Coupling();
echo $t->display($t1);
echo $t->display($t2);
echo $t->display($t3);
echo $t->display($t4);
echo $t->display($t5);
echo $t->display($dog);
?>

程序运行结果:

Class Test 初始化:属性$one=96,属性$two=12
用PHP接口技术实现的运算:加法运算结果为:108
用PHP接口技术实现的运算:减法运算结果为:84
用PHP接口技术实现的运算:乘法运算结果为:1152
用PHP接口技术实现的运算:除法运算结果为:8
用PHP接口技术实现的运算:取模运算结果为:0
用PHP接口技术实现的运算:我什么运算都不做...只是为了实现'耦合设计模式'...我是出来打酱油的......

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/752374.htmlTechArticle一个软件,它具有许多类,类与类之间需要互相调用,一旦某个类与另一个类具有紧密耦合关系的时候,这个软件的重用性就会大大降低。...
Statement
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
What are some common problems that can cause PHP sessions to fail?What are some common problems that can cause PHP sessions to fail?Apr 25, 2025 am 12:16 AM

Reasons for PHPSession failure include configuration errors, cookie issues, and session expiration. 1. Configuration error: Check and set the correct session.save_path. 2.Cookie problem: Make sure the cookie is set correctly. 3.Session expires: Adjust session.gc_maxlifetime value to extend session time.

How do you debug session-related issues in PHP?How do you debug session-related issues in PHP?Apr 25, 2025 am 12:12 AM

Methods to debug session problems in PHP include: 1. Check whether the session is started correctly; 2. Verify the delivery of the session ID; 3. Check the storage and reading of session data; 4. Check the server configuration. By outputting session ID and data, viewing session file content, etc., you can effectively diagnose and solve session-related problems.

What happens if session_start() is called multiple times?What happens if session_start() is called multiple times?Apr 25, 2025 am 12:06 AM

Multiple calls to session_start() will result in warning messages and possible data overwrites. 1) PHP will issue a warning, prompting that the session has been started. 2) It may cause unexpected overwriting of session data. 3) Use session_status() to check the session status to avoid repeated calls.

How do you configure the session lifetime in PHP?How do you configure the session lifetime in PHP?Apr 25, 2025 am 12:05 AM

Configuring the session lifecycle in PHP can be achieved by setting session.gc_maxlifetime and session.cookie_lifetime. 1) session.gc_maxlifetime controls the survival time of server-side session data, 2) session.cookie_lifetime controls the life cycle of client cookies. When set to 0, the cookie expires when the browser is closed.

What are the advantages of using a database to store sessions?What are the advantages of using a database to store sessions?Apr 24, 2025 am 12:16 AM

The main advantages of using database storage sessions include persistence, scalability, and security. 1. Persistence: Even if the server restarts, the session data can remain unchanged. 2. Scalability: Applicable to distributed systems, ensuring that session data is synchronized between multiple servers. 3. Security: The database provides encrypted storage to protect sensitive information.

How do you implement custom session handling in PHP?How do you implement custom session handling in PHP?Apr 24, 2025 am 12:16 AM

Implementing custom session processing in PHP can be done by implementing the SessionHandlerInterface interface. The specific steps include: 1) Creating a class that implements SessionHandlerInterface, such as CustomSessionHandler; 2) Rewriting methods in the interface (such as open, close, read, write, destroy, gc) to define the life cycle and storage method of session data; 3) Register a custom session processor in a PHP script and start the session. This allows data to be stored in media such as MySQL and Redis to improve performance, security and scalability.

What is a session ID?What is a session ID?Apr 24, 2025 am 12:13 AM

SessionID is a mechanism used in web applications to track user session status. 1. It is a randomly generated string used to maintain user's identity information during multiple interactions between the user and the server. 2. The server generates and sends it to the client through cookies or URL parameters to help identify and associate these requests in multiple requests of the user. 3. Generation usually uses random algorithms to ensure uniqueness and unpredictability. 4. In actual development, in-memory databases such as Redis can be used to store session data to improve performance and security.

How do you handle sessions in a stateless environment (e.g., API)?How do you handle sessions in a stateless environment (e.g., API)?Apr 24, 2025 am 12:12 AM

Managing sessions in stateless environments such as APIs can be achieved by using JWT or cookies. 1. JWT is suitable for statelessness and scalability, but it is large in size when it comes to big data. 2.Cookies are more traditional and easy to implement, but they need to be configured with caution to ensure security.

See all articles

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

Video Face Swap

Video Face Swap

Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Tools

SublimeText3 English version

SublimeText3 English version

Recommended: Win version, supports code prompts!

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

Powerful PHP integrated development environment

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

This project is in the process of being migrated to osdn.net/projects/mingw, you can continue to follow us there. MinGW: A native Windows port of the GNU Compiler Collection (GCC), freely distributable import libraries and header files for building native Windows applications; includes extensions to the MSVC runtime to support C99 functionality. All MinGW software can run on 64-bit Windows platforms.

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

Integrate Eclipse with SAP NetWeaver application server.

Atom editor mac version download

Atom editor mac version download

The most popular open source editor