zoukankan      html  css  js  c++  java
  • php设计模式 — 工厂方法模式(多态性工厂模式) (虚拟构造子模式)

    概念介绍:

    工厂方法模式: 在学习工厂方法模式之前请首先阅读简单工厂模式
    工厂方法模式的用意是定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类中.
    工厂方法模式是简单工厂模式的进一步抽象和推广

    工厂方法模式的几个需要的对象:

    1、抽象工厂

    2、具体工厂:实现抽象工厂接口列出的方法,并且每个工厂对应各自的产品

    3、抽象产品

    4、具体产品


    简单工厂模式里面的果园的例子,可以改写成工厂方法模式 , 大家可以自己实验。

    案例图:

    代码实例:

     1 <?php
     2 
     3 //此实例是根据女娲造人写的
     4 
     5 //首先定义一个全局的工厂接口
     6 //由阴绳 阳绳来继承 都要实现举绳子这个方法
     7 interface nvwaRope{
     8     public function liftRope($name);
     9 }
    10 
    11 //定义阴绳 来继承 nvwaRope
    12 class yinRope implements nvwaRope{
    13     public function liftRope($name){
    14         return new boy($name);
    15     }
    16 }
    17 
    18 //定义阳绳 
    19 class yangRope implements nvwaRope{
    20     public function liftRope($name){
    21         return new girl($name);
    22     }
    23 }
    24 
    25 
    26 //定义一个人的抽象接口
    27 interface people{
    28     public function eat();
    29     public function getName();
    30 }
    31 
    32 
    33 abstract class abstractPeople implements people{
    34     private $name;
    35 
    36     public function __construct($name){
    37         $this->name = $name;
    38     }
    39 
    40     public function eat(){
    41         echo $this->name . " eat";
    42     }
    43 
    44     public function getName(){
    45         echo $this->name;
    46         return $this->name;
    47     }
    48 
    49     //检查是否有胸
    50     public function checkChest(){
    51         return $this->haveChest;
    52     }
    53 }
    54 
    55 class boy extends abstractPeople{
    56     public $haveChest = false; //男孩没有胸
    57 }
    58 
    59 class girl extends abstractPeople{
    60     public $haveChest = true; //女孩有胸
    61 }
    62 
    63 
    64 
    65 //使用方式
    66 
    67 //首先获取工厂的实例 也就是阴绳或者阳绳的实例
    68 $yinRope = new yinRope();
    69 
    70 $people = $yinRope->liftRope("张三");
    71 echo $people->eat();
    72 echo $people->getName();
    73 var_dump($people->checkChest());
  • 相关阅读:
    springcloud -- sleuth+zipkin整合rabbitMQ详解
    docker 更新后出现 error during connect
    springcloud --- spring cloud sleuth和zipkin日志管理(spring boot 2.18)
    kotlin系列文章 --- 3.条件控制
    kotlin -- 可见性修饰符
    kotlin系列文章 --- 2.基本语法
    kotlin系列文章 --- 1.初识kotlin
    oracle索引失效总结
    mysql常用命令行操作
    JavaFX简介和Scene Builder工具的安装使用简易教程
  • 原文地址:https://www.cnblogs.com/aqsmoke/p/3958585.html
Copyright © 2011-2022 走看看