设计模式

什么叫设计模式

所谓设计模式,就是一些解决问题的“常规做法”,是一种认为较好的经验总结。面对不同的问题,可能会有不同的解决办法,此时就可以称为不同的设计模式。

工厂模式

在实际应用中,我们总是需要去实例化很多很多的类——以得到对象。

则:

我们可以设计出一个“工厂”(其实就是类),该工厂的作用(任务)就是为人们“生产”各种对象。这种工厂通常只要指定类名,就可以据此获取一个该类的对象。

单例模式

应用中的某种需求:

对于某些类,在使用它的时候,从头到尾(程序运行的开始到结束),都只需要一个对象,就可以完成所有任务。

单例:

某个类,只允许其“创建”出一个对象,即使去进行多次创建,也只能得到一个对象。

$obj1 = new A();

$obj2 = $obj1; //此时还是1个对象,$obj2只是最终指向了跟$obj1同样的对象

$obj3 = new A(); //这时候才有了第二个对象。

但其实在php语言中,一个对象还可以使用clone运算符进行克隆,则就也会“生成”新对象。

因此,还需要在类中使用私有化措施来禁止克隆,最终,单例模式的实现如下:

抽象类,抽象方法

抽象类

在正常定义类的前面,加上关键字:abstract,那就构成抽象类。

abstract  class  类名{.....类的定义.....}

可见,抽象类有什么用?

抽象类可以用来规范一些类的共同特性,但又不能去对其进行实例化。

怎么规范:继承它。

也就是说,抽象类的使命是专门做“父类”:子类就继承了它的特性,这就是“规范作用”

抽象方法:

抽象方法是一个没有方法体(也不含大括号)的方法定义“头”而已。

前面需要加上abstract。

比如:abstract  function  f1($x1, $y, $m) ; //注意,后面一定有分号。

抽象方法有什么用?

其实跟抽象类一样,配合抽象类,来实现对下级类的“行为规范”。

即相当于要求下级类去完成该功能(动作),但自己是不做的。

抽象类抽象方法细节关系描述

1,如果一个方法定义为抽象方法,则其所在的类必须定义为抽象类。

2,但,一个抽象类中,可以没有抽象方法——但通常意义不大。

3,子类继承自一个抽象类,则子类必须实现父类中的所有抽象方法,除非子类也继续作为抽象类

4,子类实现抽象父类的方法时,访问控制修饰符的范围不能降低,且方法的参数也须一致——其实这就是重写,所以要满足重写的要求。

php设计模式;抽象类、抽象方法的更多相关文章

  1. Java abstract关键字 抽象类 抽象方法

    用 abstract 修饰的类是抽象类,它不能生成对象 含有抽象方法的类称为抽象类 抽象方法使用 abstract 修饰 抽象类不能直接实例化,只能由子类实例化 举例 abstract class T ...

  2. Java 抽象类 抽象方法 使用说明

    知识点 什么是抽象类 抽象类与普通类主要两点不同: 1.在类的修饰符后面多了一个abstract关键字 2.抽象类是不允许通过new来实例化的 由于抽象类不能通过new来实例化,所以基本上是在继承中当 ...

  3. python抽象类+抽象方法实现接口(interface)

    #python没有类似于java和C#的接口类(interface),需要使用抽象类 和抽象方法来实现接口功能 #!/usr/bin/env python#_*_ coding:utf-8 _*_ f ...

  4. Java基础 -- Java 抽象类 抽象方法

    总结: 1. 抽象类不能被实例化(初学者很容易犯的错),如果被实例化,就会报错,编译无法通过.只有抽象类的非抽象子类可以创建对象. 2. 抽象类中不一定包含抽象方法,但是有抽象方法的类必定是抽象类. ...

  5. c# 抽象类 抽象方法

    抽象类与非抽象类的主要区别: ·抽象类不能直接被实例化 ·抽象类中可以包含抽象成员,但非抽象类中不可以 ·抽象类不能被密封 声明抽象方法时需注意:·抽象方法必须声明在抽象类中 ·声明抽象方法时,不能使 ...

  6. Java 学习(13):抽象类& 抽象方法& 封装

    目录 --- 抽象类 --- 封装 抽象类: 在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的 ...

  7. Java 抽象类 抽象方法 接口

    #抽象类 在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类. 抽象类除了不能实例化 ...

  8. 抽象类 抽象方法 abstract

    abstract: * abstract修饰类: 抽象类 * > 此类不能被实例化 * > 抽象类中一定要有构造器, 便于子类对象实例时调用(涉及子类对象实例化过程) * > 开发中 ...

  9. Java 面向对象编程 抽象类 抽象方法 abstract

    抽象类 通过abstract定义的方法是抽象方法,它只有定义,没有实现.抽象方法定义了子类必须实现的接口规范: 定义了抽象方法的class必须被定义为抽象类,从抽象类继承的子类必须实现抽象方法: 如果 ...

  10. Java 接口 抽象类 抽象方法

    abstract class elehousekeeping { //抽象家用电器类 abstract void opermode(); //抽象方法} class TV extends elehou ...

随机推荐

  1. andriod studio命名规范

    标识符命名法标识符命名法最要有四种: 1 驼峰(Camel)命名法:又称小驼峰命名法,除首单词外,其余所有单词的第一个字母大写. 2 帕斯卡(pascal)命名法:又称大驼峰命名法,所有单词的第一个字 ...

  2. linux设置定时任务的方法步骤

    一,首先登录 二,找到文件夹 三,查看定时任务 crontab -l 四,vi root 编辑定时任务 编辑完成后,点ESC,然后:wq 时间格式 分钟 小时 日期 月份 周 命令 数字范围 0-59 ...

  3. 记Oracle中regexp_substr的一次调优(速度提高95.5%)

    项目中需要做一个船舶代理费的功能,针对代理的船进行收费,那么该功能的第一步便是选择进行代理费用信息的录入,在进行船舶选择的时候,发现加载相关船舶信息十分的慢,其主要在sql语句的执行,因为测试的时候数 ...

  4. web前端兼容性问题

    传送门:https://www.cnblogs.com/zhoudawei/p/7497544.html

  5. 在Ubuntu 18.04上安装OpenCV 4(C ++和Python)

    OpenCV于11月20日发布了OpenCV-3.4.4和OpenCV-4.0.0.这些版本中有很多错误修复和其他更改.发布重点如下: OpenCV现在是C ++ 11库,需要符合C ++ 11标准的 ...

  6. DELPHI LINUX中间件隆重发布

    LINUX和WINDOWS是目前最流利的两个服务器操作系统,各种云服务商也是同时提供这2种操作系统的云服务器. 即日起,在原有WINDOWS中间件的产品基础上,再隆重推出新产品:LINUX中间件.这样 ...

  7. vue+springboot上传和下载附件功能

    https://blog.csdn.net/qq_35867245/article/details/84325385 上传附件(服务端代码) 第一步:在application.yml中配置附件要上传的 ...

  8. mycat启动报Unable to start JVM: No such file or directory (2)【转】

    mycat启动失败,查看日志 /mycat/logs/wrapper.log发现如下信息 1  STATUS | wrapper  | 2017/11/22 16:15:17 | --> Wra ...

  9. win10安装Navicat 12 for MySQL

    Navicat 下载地址: https://blog.csdn.net/u013600314/article/details/80605981 Navicat 连接Mysql 的方法:https:// ...

  10. openresty开发系列21--lua的模块

    openresty开发系列21--lua的模块 从lua5.1开始,Lua 加入了标准的模块管理机制,Lua 的模块是由变量.函数等已知元素组成的 table, 因此创建一个模块很简单,就是创建一个 ...