PHP设计模式学习笔记[3.基本设计模式概念]

设计模式基本原则

MVC的特点是:通过视图和模型之间建立订阅/通知协议,实现视图和模型的解耦。从MVC开始讨论设计模式中的各种工具,应为大多数设计模式都是与MVC有关的,只有某些部分是与MVC没关。

  • 第一个设计模式原则:按接口而不是实现进行编程
    对象使用他的接口或者抽象类进行引用,而不是使用对象的具体类进行引用。按接口编程可以将设计与实现进行解耦。只要保证接口的参数和返回值不变,他的内容任意发生改动也不会对其他程序造成影响。在java这类强类型语言中,申明一个变量时,指定其数据类型为需要实例化的对象的抽象/接口类。PHP不能声明变量的同时指定数据类型,可以通过在函数中指定能够接收的参数类型实现。
IVehicle.php
<?php
interface IVehicle
{
	public function running();
	public function ride();
}
Car.php
<?php
include_once 'IVehicle.php';
class Car implements IVehicle
{
    public function running(){
        return "轿车能在快速车道道跑,最高时速120km/h\n";
    }
    public function ride(){
        return "轿车能载5个人\n";
    }
}
Bus.php
<?php
include_once 'IVehicle.php';
class Bus implements IVehicle
{
    public function running(){
        return "公交车只能在大客车道跑,最高时速90km/h\n";
    }
    public function ride(){
        return "公交车能乘坐40人\n";
    }
}
TrafficBrief.php
<?php
include_once "Car.php";
include_once "Bus.php";
include_once "IVehicle.php";
class TrafficBrief
{
    public function brief(IVehicle $vehicle){
        echo $vehicle->ride();
        echo $vehicle->running();
    }
}
$one = new TrafficBrief();
$one->brief(new Car());
echo "-------------------------\n";
$one->brief(new Bus());
  • 第二个设计模式原则:应当优先选择对象组合而不是类继承
    子类过度继续,从父类得到了大量的方法和属性,变得臃肿。如果我们需要修改父类,需要同时维护继承该父类的子类,也有可能修改父类后会导致子类出现异常。

IS-A 与 HAS-A的差别

IS-A:在继承关系中,子类属于父类的一部分,相比父类更加具体。
HAS-A:在组合中,某个类包含了一个或多个不同的类,这个类向那些被包含的类分派任务(委托),使用它们的方法完成一系列操作。

设计模式分类

  • 创建性
    对象的创建进行封装。一个复杂的对象,他的创建可能需要依赖于其他对象(组合)、配置文件、环境等。对对象的创建进行封装,能隐藏这些细节,简单的创建出对象。
  • 结构性
    有组织的结合对象或类
    结构性类模式:采用继承组织接口和实现。
    结构性对象模式:通过对象组合方式,创造出新功能。
  • 行为性
    解决的问题是算法和对象之间责任的分配

如何选择设计模式

在选择设计模式时,需要考虑,具体业务那些部分会发生改变,导致需要重新进行程序设计。
下表展示了常用设计模式,哪些部分改变后不会导致重新设计

作用范围模式可变化的部分
创建型工厂方法实例化对象的子类
对象原型实例化对象的类
结构型适配器对象的接口
对象适配器对象职责而不派生子类
行为型模板方法算法中的步骤
对象状态对象状态
对象策略算法
对象责任链可以满足请求的对象
对象观察者依赖于其他对象的对象数,当前可以有多少个依赖对象

框架与设计模式的区别

框架具有指示性,可以清晰的指示解决一个问题的结构。框架是比设计模式更加具体,应用采用某个框架,就会受这个框架限制,但是应用构建起了简单。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值