Rumah  >  Artikel  >  pembangunan bahagian belakang  >  php 工厂模式和策略模式区别

php 工厂模式和策略模式区别

(*-*)浩
(*-*)浩asal
2019-06-06 15:12:444335semak imbas

工厂是创建型模式,它的作用就是创建对象;

策略是行为型模式,它的作用是让一个对象在许多行为中选择一种行为; 

php 工厂模式和策略模式区别

关注点不一样

一个关注对象创建

一个关注行为的封装(推荐学习:PHP视频教程

解决不同的问题

工厂模式是创建型的设计模式,它接受指令,创建出符合要求的实例;它主要解决的是资源的统一分发,将对象的创建完全独立出来,让对象的创建和具体的使用客户无关。主要应用在多数据库选择,类库文件加载等。

策略模式是为了解决的是策略的切换与扩展,更简洁的说是定义策略族,分别封装起来,让他们之间可以相互替换,策略模式让策略的变化独立于使用策略的客户。

工厂相当于黑盒子,策略相当于白盒子;

实例:

<?php
header(&#39;content-type:text/html;charset=utf-8&#39;);
abstract class Product {
abstract public function getName();
}
class ProductA extends Product  {
public function getName() {
echo &#39;这是A商品<br>';
}
}
class ProductB extends Product {
public function getName() {
echo '这是B商品<br>';
}
}
//工厂模式
class ProductFactory {
public static function create($num) {
switch($num) {
case 1:
return new ProductA();
case 2:
return new ProductB();
}
return null;
}
}
//传递不同的参数获取不同的对象
$obj=ProductFactory::create(1);
$obj->getName(); //这是A商品
$obj=ProductFactory::create(2);
$obj->getName(); //这是B商品
 
//=======策略模式
<?php
header('content-type:text/html;charset=utf-8');
interface IStrategy {
function ontheway();
}
class Walk implements IStrategy {
public function ontheway() {
echo '走着去<br>';
}
}
class Bick implements IStrategy {
public function ontheway() {
echo '骑自行车去<br>';
}
}
class Bus implements IStrategy {
public function ontheway() {
echo '坐巴士去<br>';
}
}
//策略模式,传递不同的参数,调用不同的策略
class Strategy{
public function getWay(IStrategy $obj) {
$obj->ontheway();
}
}
$obj=new Strategy();
$obj->getWay(new Walk); //走着去
$obj->getWay(new Bick); //骑自行车去
$obj->getWay(new Bus); //坐巴士去

更多PHP相关技术文章,请访问PHP图文教程栏目进行学习!

Atas ialah kandungan terperinci php 工厂模式和策略模式区别. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn