PHP面向对象:接口实例

我们设计一个在线销售系统,用户部分设计如下:

将用户分为,NormalUser, VipUser, InnerUser三种。

要求根据用户的不同折扣计算用户购买产品的价格。

并要求为以后扩展和维护预留空间。

用户部分先声明了一个接口User,用户都是User的实现。

User.php
view sourceprint?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   

39 class VipUser extends AbstractUser { 

40     protected  $discount = 0.8; 

41     protected  $grade = "VipUser"; 

42 } 

43   

44 class InnerUser extends AbstractUser { 

45     protected  $discount = 0.7; 

46     protected  $grade = "InnerUser"; 

47 } 

48 ?>

关于产品,我们进行了如下设计。

声明一个接口Product,然后从Product继承下Book接口。

在线销售的图书最后是实现了Book接口的BookOnline类。

Product.php
view sourceprint?01 <? 

02 /*与产品相关的类放.*/

03 Interface Product{ //定义产品接口 

04     public function getProductName(); 

05     public function getProductPrice(); 

06 } 

07   

08 interface Book extends Product { // book是产品的一个分类 

09     public function getAuthor(); 

10 } 

11   

12 class BookOnline implements Book{ // 定义book类. 

13     private $productName;  // 产品名 

14     private $productPrice; // 产品价格 

15     private $author;  //作者 

16       

17     public function __construct($_bookName){ 

18         $this->productName = $_bookName; 

19         //这里放置相关初始化的代码. 

20         //与数据库关联的代码. 

21     } 

22       

23     public function getProductName(){ 

24         return $this->productName; 

25     } 

26       

27     public function getProductPrice(){ 

28         //这里从数据库读取价格. 

29         //假设价格是 100元. 

30         $this->productPrice = 100; 

31         return $this->productPrice; 

32     } 

33       

34     public function getAuthor(){ 

35         //从数据库里面取值. 

36         return $this->author; 

37     }    

38 } 

39 ?>

关于结算,我们使用了独立的结算类,使用静态方法做计算。产品结算。注意参数类型。

ProductSettle.php
view sourceprint?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 ?>

下面的例子是实现。大家可以自己分析下。

view sourceprint?01 <? 

02 include_once("./class/User.php"); 

03 include_once("./class/Product.php"); 

04 include_once("./class/ProductSettle.php"); 

05   

06 $number = 10; 

07 $book = new BookOnline("设计模式"); 

08   

09   

10 $user = new NormalUser("Tom"); 

11 $price = ProductSettle::finalPrice($user,$book,$number); 

12 $str =  "您好,尊敬的用户 " . $user->getName() . " <br>"; 

13 $str .= "您的级别是 ". $user->getGrade() .", <br>"; 

14 $str .= "您的折扣是 " . $user->getDiscount() . "<br>"; 

15 $str .= "购买 $number 本 《 ". $book->getProductName() ; 

16 $str .=  "》的价格是 $price <br><br>"; 

17 echo $str; 

18   

19   

20 $user = new vipUser("Tom"); 

21 $price = ProductSettle::finalPrice($user,$book,$number); 

22 $str =  "您好,尊敬的用户 " . $user->getName() . " <br>"; 

23 $str .= "您的级别是 ". $user->getGrade() .", <br>"; 

24 $str .= "您的折扣是 " . $user->getDiscount() . "<br>"; 

25 $str .= "购买 $number 本 《 ". $book->getProductName() ; 

26 $str .=  "》的价格是 $price <br><br>"; 

27 echo $str; 

28   

29 $user = new InnerUser("Tom"); 

30 $price = ProductSettle::finalPrice($user,$book,$number); 

31 $str =  "您好,尊敬的用户 " . $user->getName() . " <br>"; 

32 $str .= "您的级别是 ". $user->getGrade() .", <br>"; 

33 $str .= "您的折扣是 " . $user->getDiscount() . "<br>"; 

34 $str .= "购买 $number 本 《 ". $book->getProductName() ; 

35 $str .=  "》的价格是 $price <br><br>"; 

36 echo $str; 

37 ?>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值