PHP面向对象之旅:一个接口实例,很好的例子
来源:互联网 发布:fanuc编程视频教程 编辑:程序博客网 时间:2024/06/02 07:46
我们设计一个在线销售系统,用户部分设计如下:
将用户分为,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
- PHP面向对象之旅:一个接口实例,很好的例子
- PHP面向对象之旅:一个接口实例,很好的例子
- PHP面向对象之旅:一个接口实例,很好的例子
- PHP面向对象之接口的实例
- PHP面向对象:接口实例
- php 面向对象的一个简单实例
- PHP面向对象之接口
- 一个面向对象的JS例子,很好的支持了开闭原则(不要重复你昨天的代码)
- 一个测试接口加载,类加载很好的例子
- 一个面向接口编程的好例子
- 一个面向接口编程的好例子
- 一个面向接口编程的好例子
- 一个面向接口编程的好例子
- 面向接口编程的一个小例子
- 面向接口编程的一个例子
- php面向对象之接口概念-133
- php面向对象编程--多态性之接口
- php面向对象之接口教程
- windows7系统笔记本设置成虚拟WiFi热点(即“无线路由器”)
- 视频专辑:Python系列视频教程
- Hibernate 的乐观锁与悲观锁
- 程序员应该阅读的非编程类书籍有哪些?
- java程序性能优化
- PHP面向对象之旅:一个接口实例,很好的例子
- 二叉树
- 五大Android布局方式浅析
- js操作select
- android webView初识
- UVa:10183 How Many Fibs?
- 修改mysql客户端及服务器的字符集
- SpringMVC工作原理
- android 软键盘