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

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

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

二. 注意事项

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

A: 暂时现象

三. 设计模式普遍流程

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

(1) 业务封装

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

(2) 分离

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

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

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

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


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

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

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

具体流程

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

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

说了那么多,还是要具体落实到响应的代码中。这里是一个加减法的简单工厂实现:
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 "
"; echo $operationSubObj->generateOperation()->getResult(); ?>

code Out:

11
-1

你可能感兴趣的:(设计模式(一)简单工厂设计模式)