PHP面向对象之旅:一个接口实例,很好的例子
2013-11-25 11:17
656 查看
我们设计一个在线销售系统,用户部分设计如下:
将用户分为,NormalUser, VipUser, InnerUser三种。
要求根据用户的不同折扣计算用户购买产品的价格。
并要求为以后扩展和维护预留空间。
用户部分先声明了一个接口User,用户都是User的实现。
关于产品,我们进行了如下设计。
声明一个接口Product,然后从Product继承下Book接口。
在线销售的图书最后是实现了Book接口的BookOnline类。
关于结算,我们使用了独立的结算类,使用静态方法做计算。产品结算。注意参数类型。
下面的例子是实现。大家可以自己分析下。
PHP面向对象之旅:类和对象
PHP面向对象之旅:类的属性
PHP面向对象之旅:类的方法
PHP面向对象之旅:对象的比较
PHP面向对象之旅:构造函数
PHP面向对象之旅:类的继承
PHP面向对象之旅:访问控制
PHP面向对象之旅:方法覆盖
PHP面向对象之旅:this关键字
PHP面向对象之旅:parent::关键字
PHP面向对象之旅:再谈重载
PHP面向对象之旅:获取用户数据
PHP面向对象之旅:用户权限管理类
PHP面向对象之旅:static变量与方法
PHP面向对象之旅:单例模式
PHP面向对象之旅:final类和方法
PHP面向对象之旅:PHP中的常量
PHP面向对象之旅:抽象类
PHP面向对象之旅:抽象方法
PHP面向对象之旅:抽象类继承抽象类
PHP面向对象之旅:静态抽象方法
PHP面向对象之旅:模板模式
PHP面向对象之旅:接口与抽象方法
PHP面向对象之旅:接口的实现
PHP面向对象之旅:接口的继承
PHP面向对象之旅:类型提示
PHP面向对象之旅:PHP的多态
PHP面向对象之旅:instanceof运算符
PHP面向对象之旅:接口与组合模拟多继承
PHP面向对象之旅:一个接口实例
PHP面向对象之旅:简单工厂模式
原文地址:http://www.nowamagic.net/librarys/veda/detail/1083
将用户分为,NormalUser, VipUser, InnerUser三种。
要求根据用户的不同折扣计算用户购买产品的价格。
并要求为以后扩展和维护预留空间。
用户部分先声明了一个接口User,用户都是User的实现。
User.php
01 | <? |
02 | /* |
03 | * 定义了 User接口. |
04 | * 和子类 NormalUser,VipUser,InnerUser |
05 | */ |
06 | //User接口,定义了三个抽象方法. |
07 | interface User{ |
08 | public function getName(); |
09 | public function setName( $_name ); |
10 | public function getDiscount(); |
11 | } |
12 | abstract class AbstractUser implements User{ |
13 | private $name = "" ; //名字 |
14 | protected $discount =0; //折扣 |
15 | protected $grade = "" ; //级别 |
16 |
17 | public function __construct( $_name ){ |
18 | $this ->setName( $_name ); |
19 | } |
20 | public function getName(){ |
21 | return $this ->name; |
22 | } |
23 | public function setName( $_name ){ |
24 | $this ->name = $_name ; |
25 | } |
26 | public function getDiscount(){ |
27 | return $this ->discount; |
28 | } |
29 |
30 | public function getGrade(){ |
31 | return $this ->grade; |
32 | } |
33 | } |
34 | class NormalUser extends AbstractUser { |
35 | protected $discount =1.0; |
36 | protected $grade = "NormalUser" ; |
37 | } |
38 | class VipUser extends AbstractUser { |
39 | protected $discount =0.8; |
40 | protected $grade = "VipUser" ; |
41 | } |
42 | class InnerUser extends AbstractUser { |
43 | protected $discount =0.7; |
44 | protected $grade = "InnerUser" ; |
45 | } |
46 | ?> |
声明一个接口Product,然后从Product继承下Book接口。
在线销售的图书最后是实现了Book接口的BookOnline类。
Product.php
01 | <? |
02 | /*与产品相关的类放.*/ |
03 | Interface Product{ //定义产品接口 |
04 | public function getProductName(); |
05 | public function getProductPrice(); |
06 | } |
07 | interface Book extends Product { // book是产品的一个分类 |
08 | public function getAuthor(); |
09 | } |
10 | class BookOnline implements Book{ // 定义book类. |
11 | private $productName ; // 产品名 |
12 | private $productPrice ; // 产品价格 |
13 | private $author ; //作者 |
14 |
15 | public function __construct( $_bookName ){ |
16 | $this ->productName = $_bookName ; |
17 | //这里放置相关初始化的代码. |
18 | //与数据库关联的代码. |
19 | } |
20 |
21 | public function getProductName(){ |
22 | return $this ->productName; |
23 | } |
24 |
25 | public function getProductPrice(){ |
26 | //这里从数据库读取价格. |
27 | //假设价格是 100元. |
28 | $this ->productPrice =100; |
29 | return $this ->productPrice; |
30 | } |
31 |
32 | public function getAuthor(){ |
33 | //从数据库里面取值. |
34 | return $this ->author; |
35 | } |
36 | } |
37 | ?> |
ProductSettle.php
01 | <? |
02 | include_once ( "User.php" ); |
03 | include_once ( "Product.php" ); |
04 | //买了产品到底多少钱呢? |
05 | class ProductSettle{ |
06 | public static function finalPrice(User $_user ,Product $_product , $number =1){ |
07 | $price = $_user ->getDiscount() * $_product ->getProductPrice() * $number ; |
08 | return $price ; |
09 | } |
10 | } |
11 | ?> |
01 | <? |
02 | include_once ( "./class/User.php" ); |
03 | include_once ( "./class/Product.php" ); |
04 | include_once ( "./class/ProductSettle.php" ); |
05 | $number =10; |
06 | $book = new BookOnline( "设计模式" ); |
07 | $user = new NormalUser( "Tom" ); |
08 | $price =ProductSettle::finalPrice( $user , $book , $number ); |
09 | $str = "您好,尊敬的用户 " . $user ->getName() . " <br>" ; |
10 | $str .= "您的级别是 " . $user ->getGrade() . ", <br>" ; |
11 | $str .= "您的折扣是 " . $user ->getDiscount() . "<br>" ; |
12 | $str .= "购买 $number 本 《 " . $book ->getProductName() ; |
13 | $str .= "》的价格是 $price <br><br>" ; |
14 | echo $str ; |
15 | $user = new vipUser( "Tom" ); |
16 | $price =ProductSettle::finalPrice( $user , $book , $number ); |
17 | $str = "您好,尊敬的用户 " . $user ->getName() . " <br>" ; |
18 | $str .= "您的级别是 " . $user ->getGrade() . ", <br>" ; |
19 | $str .= "您的折扣是 " . $user ->getDiscount() . "<br>" ; |
20 | $str .= "购买 $number 本 《 " . $book ->getProductName() ; |
21 | $str .= "》的价格是 $price <br><br>" ; |
22 | echo $str ; |
23 | $user = new InnerUser( "Tom" ); |
24 | $price =ProductSettle::finalPrice( $user , $book , $number ); |
25 | $str = "您好,尊敬的用户 " . $user ->getName() . " <br>" ; |
26 | $str .= "您的级别是 " . $user ->getGrade() . ", <br>" ; |
27 | $str .= "您的折扣是 " . $user ->getDiscount() . "<br>" ; |
28 | $str .= "购买 $number 本 《 " . $book ->getProductName() ; |
29 | $str .= "》的价格是 $price <br><br>" ; |
30 | echo $str ; |
31 | ?> |
延伸阅读
此文章所在专题列表如下:PHP面向对象之旅:类和对象
PHP面向对象之旅:类的属性
PHP面向对象之旅:类的方法
PHP面向对象之旅:对象的比较
PHP面向对象之旅:构造函数
PHP面向对象之旅:类的继承
PHP面向对象之旅:访问控制
PHP面向对象之旅:方法覆盖
PHP面向对象之旅:this关键字
PHP面向对象之旅:parent::关键字
PHP面向对象之旅:再谈重载
PHP面向对象之旅:获取用户数据
PHP面向对象之旅:用户权限管理类
PHP面向对象之旅:static变量与方法
PHP面向对象之旅:单例模式
PHP面向对象之旅:final类和方法
PHP面向对象之旅:PHP中的常量
PHP面向对象之旅:抽象类
PHP面向对象之旅:抽象方法
PHP面向对象之旅:抽象类继承抽象类
PHP面向对象之旅:静态抽象方法
PHP面向对象之旅:模板模式
PHP面向对象之旅:接口与抽象方法
PHP面向对象之旅:接口的实现
PHP面向对象之旅:接口的继承
PHP面向对象之旅:类型提示
PHP面向对象之旅:PHP的多态
PHP面向对象之旅:instanceof运算符
PHP面向对象之旅:接口与组合模拟多继承
PHP面向对象之旅:一个接口实例
PHP面向对象之旅:简单工厂模式
原文地址:http://www.nowamagic.net/librarys/veda/detail/1083
相关文章推荐
- PHP面向对象之旅:一个接口实例,很好的例子
- PHP面向对象之旅:一个接口实例
- 一个例子体现JAVA中的面向对象思想,接口(抽象类)的用处
- 一个饲养员给动物喂食物的例子体现JAVA中的面向对象思想,接口(抽象类)的用处
- 做一个饲养员给动物喂食物的例子体现JAVA中的面向对象思想,接口(抽象类)的用处
- PHP接口开发加密技术实例原理与例子
- 2.0 面向对象 类与实例(关键字)、封装、继承、多态(虚方法,抽象类,抽象方法,接口)
- 实例化一个子类对象赋给父类对象引用或一个实现了接口的类的对象赋给接口的引用的好处
- 关于面向对象中接口和抽象类的一个比喻
- PHP入门教程之面向对象基本概念实例分析
- 每日一个js实例7--通过面向对象实现选项卡
- 简单工厂(Factory)-提供一个创建对象实例的功能,而无须关心其具体实现。被创建实例的类型可以是接口、抽象类,也可以是具体的类。
- PHP接口开发加密技术实例原理与例子
- 一个经典实例理解继承与多态原理与优点(附源码)---面向对象继承和多态性理解得不够深刻的同学请进
- php学习笔记 面向对象中[接口]与[多态性]的应用
- PHP入门教程之面向对象基本概念实例分析
- PHP面向对象之旅:接口的继承
- (三)PHP面向对象理论3---接口与反射
- 一个测试接口加载,类加载很好的例子
- PHP 面向对象程序设计(oop)学习笔记(一) - 抽象类、对象接口、instanceof 和契约式编程