zoukankan      html  css  js  c++  java
  • php设计模式之工厂方法模式

    php设计模式之工厂方法模式

    工厂方法模式

    工厂方法模式(Factory Method Pattern)又称为工厂模式,也叫虚拟构造器(Virtual Constructor)模式或者多态工厂(Polymorphic Factory)模式,它属于类创建型模式。在工厂方法模式中,工厂父类负责定义创建产品对象的公共接口,而工厂子类则负责生成具体的产品对象,这样做的目的是将产品类的实例化操作延迟到工厂子类中完成,即通过工厂子类来确定究竟应该实例化哪一个具体产品类。

    模式结构

    工厂方法模式包含如下角色:

    • Product:抽象产品
    • ConcreteProduct:具体产品
    • Factory:抽象工厂
    • ConcreteFactory:具体工厂

    结构图

    这里写图片描述

    PHP代码实现

     1 <?php
     2 //抽象产品
     3 abstract class Operation
     4 {
     5     private $numA,$numB;
     6     public function __set($name,$value){
     7         $this->$name=$value;
     8     }
     9 
    10     public function __get($name){
    11         return $this->$name;
    12     }
    13     abstract public function getResult();
    14 }
    15 
    16 //具体产品
    17 class OperateAdd extends Operation
    18 {
    19     public function getResult(){
    20         $result=$this->numA+$this->numB;
    21         return $result;
    22     }
    23 }
    24 class OperateSub extends Operation
    25 {
    26     public function getResult(){
    27         $result=$this->numA-$this->numB;
    28         return $result;
    29     }
    30 }
    31 
    32 //抽象工厂
    33 interface Factory
    34 {
    35     public function createOperation();
    36 }
    37 
    38 //具体工厂
    39 class AddFactory implements Factory
    40 {
    41     public function createOperation()
    42     {
    43         return new OperateAdd();
    44     }
    45 }
    46 class SubFactory implements Factory
    47 {
    48     public function createOperation()
    49     {
    50         return new OperateSub();
    51     }
    52 }
    53 $a=new AddFactory();
    54 $b=$a->createOperation();
    55 $b->numA=1;
    56 $b->numB=5;
    57 $c=$b->getResult();
    58 var_dump($c);

    运行结果

    int 6
  • 相关阅读:
    处理sevenzipsharp 检查密码函数的Bug
    C# 开源压缩组件比较
    css 一些技巧
    input 限制输入
    原生JS实现淡入淡出效果(fadeIn/fadeOut/fadeTo)
    js string.format 方法
    Atom插件及使用
    chrome浏览器的跨域设置-包括版本49前后两种设置 ,windows&mac
    原生js监听input值改变事件
    html5 tab横向滚动,无滚动条(transform:translate)
  • 原文地址:https://www.cnblogs.com/Renyi-Fan/p/8652337.html
Copyright © 2011-2022 走看看