您的位置:首页 > 编程语言 > PHP开发

PHP面向对象:接口实例

2013-03-16 11:58 597 查看
我们设计一个在线销售系统,用户部分设计如下:

将用户分为,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 ?>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: