zoukankan      html  css  js  c++  java
  • 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	?>
    

      

  • 相关阅读:
    每天拿出来2小时浪费(文/王路) 作者: 王路
    objective-c自学总结(二)---init/set/get方法
    objective-c自学总结(一)---面向对象
    水仙花数
    独木舟上的旅行
    阶乘之和
    小明的调查统计
    管闲事的小明
    重温《STL源码剖析》笔记 第一章
    重温《STL源码剖析》笔记 第三章
  • 原文地址:https://www.cnblogs.com/sz-xioabai/p/6575946.html
Copyright © 2011-2022 走看看