PHP面向对象之旅:一个接口实例
2011-07-14 00:00
1056 查看
我们设计一个在线销售系统,用户部分设计如下:
将用户分为,NormalUser, VipUser, InnerUser三种。
要求根据用户的不同折扣计算用户购买产品的价格。
并要求为以后扩展和维护预留空间。
用户部分先声明了一个接口User,用户都是User的实现。
关于产品,我们进行了如下设计。
声明一个接口Product,然后从Product继承下Book接口。
在线销售的图书最后是实现了Book接口的BookOnline类。
关于结算,我们使用了独立的结算类,使用静态方法做计算。产品结算。注意参数类型。
下面的例子是实现。大家可以自己分析下。
将用户分为,NormalUser, VipUser, InnerUser三种。
要求根据用户的不同折扣计算用户购买产品的价格。
并要求为以后扩展和维护预留空间。
用户部分先声明了一个接口User,用户都是User的实现。
User.php
<? /* * 定义了 User接口. * 和子类 NormalUser,VipUser,InnerUser */ //User接口,定义了三个抽象方法. interface User{ public function getName(); public function setName($_name); public function getDiscount(); } abstract class AbstractUser implements User{ private $name = ""; //名字 protected $discount = 0; //折扣 protected $grade = ""; //级别 public function __construct($_name){ $this->setName($_name); } public function getName(){ return $this->name; } public function setName($_name){ $this->name = $_name; } public function getDiscount(){ return $this->discount; } public function getGrade(){ return $this->grade; } } class NormalUser extends AbstractUser { protected $discount = 1.0; protected $grade = "NormalUser"; } class VipUser extends AbstractUser { protected $discount = 0.8; protected $grade = "VipUser"; } class InnerUser extends AbstractUser { protected $discount = 0.7; protected $grade = "InnerUser"; } ?>
关于产品,我们进行了如下设计。
声明一个接口Product,然后从Product继承下Book接口。
在线销售的图书最后是实现了Book接口的BookOnline类。
Product.php
<? /*与产品相关的类放.*/ Interface Product{ //定义产品接口 public function getProductName(); public function getProductPrice(); } interface Book extends Product { // book是产品的一个分类 public function getAuthor(); } class BookOnline implements Book{ // 定义book类. private $productName; // 产品名 private $productPrice; // 产品价格 private $author; //作者 public function __construct($_bookName){ $this->productName = $_bookName; //这里放置相关初始化的代码. //与数据库关联的代码. } public function getProductName(){ return $this->productName; } public function getProductPrice(){ //这里从数据库读取价格. //假设价格是 100元. $this->productPrice = 100; return $this->productPrice; } public function getAuthor(){ //从数据库里面取值. return $this->author; } } ?>
关于结算,我们使用了独立的结算类,使用静态方法做计算。产品结算。注意参数类型。
ProductSettle.php
<? include_once("User.php"); include_once("Product.php"); //买了产品到底多少钱呢? class ProductSettle{ public static function finalPrice(User $_user,Product $_product,$number = 1){ $price = $_user->getDiscount() * $_product->getProductPrice() * $number; return $price; } } ?>
下面的例子是实现。大家可以自己分析下。
<? include_once("./class/User.php"); include_once("./class/Product.php"); include_once("./class/ProductSettle.php"); $number = 10; $book = new BookOnline("设计模式"); $user = new NormalUser("Tom"); $price = ProductSettle::finalPrice($user,$book,$number); $str = "您好,尊敬的用户 " . $user->getName() . " <br>"; $str .= "您的级别是 ". $user->getGrade() .", <br>"; $str .= "您的折扣是 " . $user->getDiscount() . "<br>"; $str .= "购买 $number 本 《 ". $book->getProductName() ; $str .= "》的价格是 $price <br><br>"; echo $str; $user = new vipUser("Tom"); $price = ProductSettle::finalPrice($user,$book,$number); $str = "您好,尊敬的用户 " . $user->getName() . " <br>"; $str .= "您的级别是 ". $user->getGrade() .", <br>"; $str .= "您的折扣是 " . $user->getDiscount() . "<br>"; $str .= "购买 $number 本 《 ". $book->getProductName() ; $str .= "》的价格是 $price <br><br>"; echo $str; $user = new InnerUser("Tom"); $price = ProductSettle::finalPrice($user,$book,$number); $str = "您好,尊敬的用户 " . $user->getName() . " <br>"; $str .= "您的级别是 ". $user->getGrade() .", <br>"; $str .= "您的折扣是 " . $user->getDiscount() . "<br>"; $str .= "购买 $number 本 《 ". $book->getProductName() ; $str .= "》的价格是 $price <br><br>"; echo $str; ?>
相关文章推荐
- PHP面向对象之旅:一个接口实例,很好的例子
- PHP面向对象之旅:一个接口实例,很好的例子
- php部分---面向对象静态、抽象类、oop接口、加载类、魔术方法、关键字。
- java面向对象高级分层实例_接口类
- 跟着百度学PHP[4]-OOP面对对象编程-3-实例化一个对象
- php面向对象全攻略 (十四) php5接口技术
- php学习笔记 面向对象中[接口]与[多态性]的应用
- php mysqli数据库面向过程,面向对象实例比较
- PHP面向对象程序设计之类常量用法实例
- 一个经典实例理解继承与多态原理与优点(附源码)---面向对象继承和多态性理解得不够深刻的同学请进
- php面向对象笔记8 抽象类与延迟绑定复习和接口
- php面向对象简单实例
- PHP面向对象程序设计之接口用法
- 【设计分享】一个面向对象思想的perl编程实例
- 简单工厂(Factory)-提供一个创建对象实例的功能,而无须关心其具体实现。被创建实例的类型可以是接口、抽象类,也可以是具体的类。
- 做一个饲养员给动物喂食物的例子体现JAVA中的面向对象思想,接口(抽象类)的用处
- PHP入门教程之面向对象基本概念实例分析
- PHP面向对象学习之三:抽象类和接口类的实际作用
- 一个饲养员给动物喂食物的例子体现JAVA中的面向对象思想,接口(抽象类)的用处