设计模式(一)简单工厂设计模式

一. 学习设计模式之前的准备工作

学习设计模式之前需要了解使用至少一门面向对象的编程语言,本文以php作为语言基础。如果读者对面向对象知识匮乏。例如对继承,多态,抽象的理解不足,造成阅读的困难,不妨去补充相关知识再来阅读。

二. 注意事项

Q: 学习了设计模式以后常常会过度设计正常吗?

A: 暂时现象

三. 设计模式普遍流程

在使用设计模式时往往需要考虑到下面几个流程实现

(1) 业务封装

如: 业务逻辑和页面逻辑分开。

(2) 分离

将一个要设计的对象根据面向对象的思想,提取出共同的属性和方法。一般先使用虚类来规划一个类的蓝图。配合着接口的实现来构造一个具体的基类。在子类中根据不同的使用场景将其虚方法重写成自己需要的方法。

分离的好处是一个完整且正常的项目,如果想要对其中一个功能进行修改,那么只需要修改这个类(类文件),而不需要改动其他无关联的代码,影响其正常功能的使用。而且在文件结构上也更加清晰。

(3) 实现不同的设计模式

在(1) (2)的基础上进行不同设计模式的实现。根据不同的使用场景,单独或交叉的使用一个或多个设计模式。来减少代码的耦合度,提高代码的可读性复用性。


四. 简单工厂设计模式理论

概括:使用工厂类针对不用的需求来生成不同的对象,将生成的对象返回使用。

ex:比如多啦a梦的万能口袋。我们都知道多啦a梦想要什么它的万能口袋就会拿出对应它想要的东西出来。流程大约是这样的:

具体流程

这个口袋就起到了工厂的作用,用行话来说就是用工厂方法来代替来new 对象的操作。是用单独的类来做创造实例的过程,这就是工厂。

五. 简单工厂设计模式的具体实践

说了那么多,还是要具体落实到响应的代码中。这里是一个加减法的简单工厂实现:
<?php
    # 抽象类

  abstract class Operation{

      protected $number_A = 0;

      protected $number_B = 0;

      # 构造方法

      function __construct(int $A, int $B)

{

          $this->number_A = $A;

          $this->number_B = $B;

      }

      # 抽象方法 用于获取计算结果的方法

      abstract function getResult():int;

  }

  # 加法

    class Add extends Operation{

      # 抽象方法的实践

        function getResult():int{

            $result = $this->number_A + $this->number_B;

            return $result;

        }

}

    # 减法

    class Sub extends Operation{

        # 抽象方法的实践

        function getResult():int{

            $result = $this->number_A - $this->number_B;

            return $result;

        }

}

  class Factory{

      private $opertionObj = NULL;

      # 构造方法

      function __construct(int $A, string $operation, int $B)

{

          if($operation === "+"){

              $this->opertionObj = new Add($A, $B);

          }

          if($operation === "-"){

              $this->opertionObj = new Sub($A, $B);

          }

}

      function generateOperation(): Operation{

          return $this->opertionObj;

      }

}

  $operationAddObj = new Factory(5,"+",6);

  $operationSubObj = new Factory(5,"-",6);

  echo $operationAddObj->generateOperation()->getResult();

  echo "<br />";

  echo $operationSubObj->generateOperation()->getResult();

?>

code Out:

11
-1

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,402评论 6 499
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,377评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,483评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,165评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,176评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,146评论 1 297
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,032评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,896评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,311评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,536评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,696评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,413评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,008评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,659评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,815评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,698评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,592评论 2 353