二手书交易系统设计模式实验

目录

1.简单工厂模式

1.1实现模块

1.2实现模式

1.3 实现代码

1.4 实验结果展示

2.观察者模式

2.1 实现模块

2.2 实现模式

2.3 实现内容

2.4 实现设计:

2.5 相关代码:

2.6 实验结果展示


1.简单工厂模式

1.1实现模块

卖家上传不同种类的书籍

1.2实现模式

以计算机类、科学类、法律类图书的交易为例:

工厂类:Seller

抽象产品类:Book

具体产品类: ScienceBook、ComputerBook、LawBook

1.3 实现代码

1) 定义抽象产品类Book,定义具体产品的公共接口

  1. abstract class Book 
  2. {
  3.     public abstract void Show();
  4. }

2) 具体产品类继承抽象产品类,定义生产的具体产品

  1. class ScienceBook extends Book
  2. {
  3.     @Override
  4.     public void Show() {
  5.         System.out.println("上传了科学类书籍");
  6.     }
  7. }

  1. class ComputerBook extends Book
  2. {
  3.     @Override
  4.     public void Show() {
  5.         System.out.println("上传了计算机类书籍");
  6.     }
  7. }

  1. class LawBook extends Book
  2. {
  3.     @Override
  4.     public void Show() {
  5.         System.out.println("上传了法律类书籍");
  6.     }
  7. }

3) 定义工厂类Seller,定义创建对应具体产品实例的方法

  1. class Seller
  2. {
  3.     public static Book Sell (string bookName)
  4.     {
  5.         switch (bookName) {
  6.             case "科学类书籍":
  7.                 return new ScienceBook();
  8.                 break;
  9.             case "计算机类书籍":
  10.              return new ComputerBook();
  11.              break;  
  12.          case "法律类书籍":
  13.              return new LawBook();
  14.              break;   
  15.          default:
  16.              return null;
  17.              break;
  18.         }
  19.     }
  20. }

4) 客户端通过实例化工厂类,并调用其创建不同目标产品类的实例

  1. public class SimpleFactoryPattern {
  2.     public static void main(String[] args){
  3.         Seller mSeller = new Seller();
  4.         //卖家上传科学类书籍
  5.         try {
  6.             mSeller.Sell("科学类书籍").Show();
  7.         }catch (NullPointerException e){
  8.             System.out.println("没有这一类书籍");
  9.         }
  10.      //卖家上传计算机类书籍
  11.      try {
  12.          mSeller.Sell("计算机类书籍").Show();
  13.      }catch (NullPointerException e){
  14.          System.out.println("没有这一类书籍");
  15.      }
  16.      //卖家上传法律类书籍
  17.      try {
  18.          mSeller.Sell("法律类书籍").Show();
  19.      }catch (NullPointerException e){
  20.          System.out.println("没有这一类书籍");
  21.      }
  22.    }
  23. }

1.4 实验结果展示

        相关前端界面详见2.6小节

2.观察者模式

2.1 实现模块

在前端UI界面中实现修改用户信息、在数据库更新相关信息,并通过服务端回传到UI界面中的功能。

2.2 实现模式

观察者模式,在此模块中,观察者为数据库,观察目标为用户信息。

2.3 实现内容

用户在客户端UI界面中修改用户信息并提交,后台数据库信息对数据进行更新,并且通过服务端传递给客户端,使UI界面中的用户基本信息也发生改变。

模块实现流程图如下:

                                                 图2.1 观察者模式实现流程图

2.4 实现设计:

1)在此模块中,我们将实现在前端修改用户基本信息界面作为目标,观察者为数据库与服务端,观察目标为客户端用户信息,通知方法则是用户在UI界面点击提交按钮提交(SubmitInfo(object sender, EventArgs e));

2)随后服务端与数据库作为观察者获取用户更新的信息,传入数据库逐步进行更新(ServiceUser.Update(user),DaoUser.Update(user));

3)接下来由服务端判断数据库中是否正确更新了数据,若正确则更新服务端用户信息,最后在客户端UI界面显示服务端中的用户信息,不正确则不做任何操作。

2.5 相关代码:

1)changePersonalInfo.aspx.cs //修改用户信息并提交

  1. protected void SubmitInfo(object sender, EventArgs e)
  2.         {
  3.             user.Name = name.Value;
  4.             user.Password = this.password.Value;
  5.             user.Tel = tel.Value;
  6.             user.Address = address.Value;
  7.             if (ServiceUser.Update(user) == true)
  8.             {
  9.                 //ServiceUser.userI = user;
  10.                 JsHelper.AlertAndRedirect("提交成功""personalInfo.aspx");
  11.             }
  12.             else
  13.             {
  14.                 JsHelper.AlertAndRedirect("提交失败""#");
  15.             }
  16.         }

2)ServerUser.cs //服务端更新

  1. public static bool Update(User user)
  2.         {
  3.             updateSignal = DaoUser.Update(user);
  4.             if (updateSignal == true)
  5.             {
  6.                 ServiceUser.user = user;
  7.             }    
  8.             return updateSignal;
  9.                 
  10.         }

3)DaoUser.cs //数据库端更新

  1. public static bool Update(User user)
  2.         {
  3.             bool result = false;
  4.             string sql = string.Format("update UserTab set name='{0}',password='{1}',tel='{2}',address='{3}' where id = 2019302110281", user.Name, user.Password, user.Tel, user.Address);           
  5.             int i = SqlHelper.ExecuteNonQuery(Conn, System.Data.CommandType.Text,sql);          
  6.             if (i > 0)
  7.             {
  8.                 result = true;
  9.             }
  10.             return result;
  11.         }

4)changePersonalInfo.aspx.cs //用户修改界面显示

  1. protected void Page_Init(object sender, EventArgs e)
  2.         {
  3.             user = ServiceUser.userI;
  4.             this.name.Value = user.Name;
  5.             this.password.Value = user.Password;
  6.             this.tel.Value = user.Tel;
  7.             this.address.Value = user.Address;
  8.         }

5)personalInfo.aspx //用户基本信息界面显示

  1. protected void Page_Load(object sender, EventArgs e)
  2.         {
  3.             User user = ServiceUser.userI;
  4.             this.name.InnerText = user.Name;
  5.             this.password.InnerText = user.Password;
  6.             this.tel.InnerText = user.Tel;
  7.             this.address.InnerText = user.Address;
  8.         }

2.6 实验结果展示

以修改用户基本信息中的密码为例,进行此模块功能实现结果展示。

1)进入

UI界面首页后,点击右上角导航栏中个人信息栏目,即可跳转到用户基本信息页面。

2)进入用户信息页面(此时用户密码为666999)

3) 此时数据库中,该用户的密码亦为“666999”。

 

4) 点击快捷操作栏目的“修改用户信息”按钮后,即可跳转到用户信息修改页面,修改用户信息。由图可见,此时用户将密码修改为“123456”。

 5)点击下方“提交”按钮即可将新的用户信息传输给数据库,更新用户信息。

6)点击“OK”按钮后回到用户信息基本界面,发现此时用户基本信息中的密码已被修改成123456。

7)此时数据库中该用户基本信息中的密码也已被修改成123456。

                                                         图2.6 修改后的数据库用户信息

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值