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

PHP面向对象之旅:一个接口实例,很好的例子

2013-11-25 11:17 656 查看
我们设计一个在线销售系统,用户部分设计如下:

将用户分为,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

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐