大话设计模式第一章---计算器简单工厂模式PHP实现

 1 <?php
 2 abstract class Operation {
 3     private $_numberA = 0;
 4     private $_numberB = 0;
 5
 6     public function __get($number) {
 7         if (isset($this->$number)) {
 8             return $this->$number;
 9         } else {
10             echo "the two number name is ‘_numberA‘ and ‘_numberB‘";
11             exit();
12         }
13     }
14
15     public function __set($number, $value) {
16         if (isset($this->$number)) {
17             $this->$number = (float) $value;
18         } else {
19             echo "the two number name is ‘_numberA‘ and ‘_numberB‘";
20             exit();
21         }
22     }
23
24     abstract function get_result();
25 }
26
27
28 class Operation_add extends Operation {
29     public function get_result() {
30         $result = 0;
31         $result = $this->_numberA + $this->_numberB;
32         return $result;
33     }
34 }
35
36 class Operation_sub extends Operation {
37     public function get_result() {
38         $result = 0;
39         $result = $this->_numverA - $this->_numverB;
40         return $result;
41     }
42 }
43
44 class Operation_mul extends Operation {
45     public function get_result() {
46         $result = 0;
47         $result = $this->_numberA * $this->_numberB;
48         return $result;
49     }
50 }
51
52 class Operation_div extends Operation {
53     public function get_result() {
54         $result = 0;
55         if ($this->_numberB == 0) {
56             throw new Exception(‘闄ゆ暟涓嶈兘涓?‘);
57         }
58         $result = $this->_numberA / $this->_numberB;
59         return $result;
60     }
61 }
62
63
64 class OperationFactory {
65     public static function create_operate($operate) {
66         $oper = null;
67         switch ($operate) {
68         case ‘+‘:
69             $oper = new Operation_add();
70             break;
71         case ‘-‘:
72             $oper = new Operation_sub();
73             break;
74         case ‘*‘:
75             $oper = new Operation_mul();
76             break;
77         case ‘/‘:
78             $oper = new Operation_div();
79             break;
80         }
81         return $oper;
82     }
83 }
84
85
86 $oper = OperationFactory::create_operate(‘/‘);
87 $oper->_numberA = 10;
88 $oper->_numberB = 20;
89 echo $oper->get_result();

可维护、可复用、可扩展、灵活

关联: 当一个类‘知道’另一个类的时候,可以用关联(association)

聚合: 表示一种弱的‘拥有’关系,体现的是A对象可以包含B对象,但B对象不是A对象的一部分。

组合:是以一种强的拥有关系,体现了严格的部分和整体的关系,部分和整体的生命周期一样。

时间: 2024-08-26 20:11:58

大话设计模式第一章---计算器简单工厂模式PHP实现的相关文章

大话设计模式第一章之简单工厂模式

package com.dp.simpleFactory; //计算器作为抽象类 定义一个计算需要什么 子类继承了两个数字 并且要有自己的计算实现方法 public abstract class Calculator { protected double numberA=0; protected double numberB=0; public double getNumberA() { return numberA; } public void setNumberA(double number

大话设计模式——第一章:简单工厂模式

#include<iostream> #include<string> #include<exception>//c++标准异常类型的库 using namespace std; bad_exception somethingwrong; //在c++中class默认的继承是private 而struct 默认的继承是public //static 类静态成员函数,即与对象无关,在类中的值不是因实例化某个对象而改变. class operation//运算类(基类) {

大话设计模式读书笔记1——简单工厂模式

最近几日,重温了一下<大话设计模式>这本书,当时读的仓促,有很多没有注意的地方,现在仔细翻看起来,发现这值得细细品味的一本书!! 好东西就要记下来!!! 第一章笔记:从一个简单的计算器程序来看简单工厂模式. 变化的地方就要封装,用一个单独的类来做创造实例的过程这就是工厂. UML图: /// <summary> /// 运算类 /// </summary> public class Operation { public double Number1 { get; set

[Python设计模式] 第1章 计算器——简单工厂模式

写在前面的话 """ 读书的时候上过<设计模式>这一门课,当时使用的教材是程杰老师的<大话设计模式>,使用的语言是C#,学过课程之后初期深感面向对象思想的伟大,但是很少应用到实际开发中.后来我接触了Python,现在工作中用到最多的也是Python,或许是因为Python的便利性,我写的很多脚本/程序都还是面向过程编程,缺少面向对象的思想在里边.因此,我打算重读程杰老师的<大话设计模式>并用Python进行实践. ""&

大话设计模式第八章之简单工厂模式

简单工厂模式 工厂方法模式 package com.dp.factory; interface IFactory { Calculator CreateCalculator(); } class AddFactory implements IFactory { @Override public Calculator CreateCalculator() { return new CalculatorAdd(); } } class SubFactory implements IFactory {

大话设计模式读书笔记--1.简单工厂模式

定义 专门定义一个类来负责创建其他类的实例, 被创建的类通常具有共同的父类. 它又称为静态工厂模式,属于类的创建型模式 模式类图 将对象的创建和对象本身业务处理分离了,可以降低系统的耦合 工厂模式实现 场景:实现一个计算器, 输入a和b, 计算a+b和a-b 下载代码,解压后目录如下图: 优缺点 当增加一个乘法运算时,需要添加乘法类和修改工厂类创建对象的逻辑,它违反了开闭原则 优点:提供专门的工程类创建对象, 降低系统的耦合 缺点: 添加新产品时,需要修改工厂类, 系统扩展困难 使用场景 1.客

设计模式粗浅理解之一------简单工厂模式

设计模式粗浅理解之------简单工厂模式 什么是简单工厂模式 从设计模式的类型上来说,简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一.简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例.简单工厂模式是工厂模式家族中最简单实用的模式,可以理解为是不同工厂模式的一个特殊实现. 角色和职责 工厂(Creator)角色 简单工厂模式的核心,它负责实现创建所有实例的内部逻辑.工厂类可以被外界直接调用,创建所需的产

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

原创文章,转载请务必将下面这段话置于文章开头处. 本文转发自Jason's Blog,原文链接 http://www.jasongj.com/design_pattern/simple_factory 简单工厂模式使用案例 有一种抽象产品--汽车(Car),同时有多种具体的子类产品,如BenzCar,BMWCar,LandRoverCar.类图如下 作为司机,如果要开其中一种车,比如BenzCar,最直接的做法是直接创建BenzCar的实例,并执行其drive方法,如下 package com.

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

嵌入式linux 设计模式(一)--简单工厂模式 一.简单工厂模式简介 1.简单工厂模式 简单工厂模式(Factory Method Pattern)是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,是通过专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类.简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例. 简单工厂模式的UML类图 工厂角色(Creator):是简单工厂模式的核心,由它负责创建所有的类的内部逻辑.工厂类必须能够被