PHP面向对象--接口实例

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

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

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

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

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

User.php
01	<?
02	/*
03	* 定义了 User接口.
04	* 和子类 NormalUser,VipUser,InnerUser 
05	*/
06	//User接口,定义了三个抽象方法.
07	interface User{
08	    publicfunction getName();
09	    publicfunction setName($_name);
10	    publicfunction getDiscount();
11	}
12	abstract classAbstractUser
implements User{
13	    private$name = "";//名字
14	    protected $discount = 0; //折扣
15	    protected $grade = ""; //级别
16	     
17	    publicfunction __construct($_name){
18	        $this->setName($_name);
19	    }
20	    publicfunction getName(){
21	        return$this->name;
22	    }
23	    publicfunction setName($_name){
24	        $this->name =$_name;
25	    }
26	    publicfunction getDiscount(){
27	        return$this->discount;
28	    }
29	     
30	    publicfunction getGrade(){
31	        return$this->grade;
32	    }
33	}
34	class NormalUserextends AbstractUser  {   
35	    protected $discount = 1.0;
36	    protected $grade = "NormalUser";
37	}
38	class VipUserextends AbstractUser {
39	    protected $discount = 0.8;
40	    protected $grade = "VipUser";
41	}
42	class InnerUserextends 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	    publicfunction getProductName();
05	    publicfunction getProductPrice();
06	}
07	interface Bookextends Product { // book是产品的一个分类
08	    publicfunction getAuthor();
09	}
10	class BookOnlineimplements Book{ // 定义book类.
11	    private$productName; 
// 产品名
12	    private$productPrice;
// 产品价格
13	    private$author; 
//作者
14	     
15	    publicfunction __construct($_bookName){
16	        $this->productName =$_bookName;
17	        //这里放置相关初始化的代码.
18	        //与数据库关联的代码.
19	    }
20	     
21	    publicfunction getProductName(){
22	        return$this->productName;
23	    }
24	     
25	    publicfunction getProductPrice(){
26	        //这里从数据库读取价格.
27	        //假设价格是 100元.
28	        $this->productPrice = 100;
29	        return$this->productPrice;
30	    }
31	     
32	    publicfunction 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	    publicstatic 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	?>

  

posted on 2017-03-18 20:19  shenzen_小白  阅读(168)  评论(0编辑  收藏  举报

导航