目录
1.简单工厂模式
1.1实现模块
卖家上传不同种类的书籍
1.2实现模式
以计算机类、科学类、法律类图书的交易为例:
工厂类:Seller
抽象产品类:Book
具体产品类: ScienceBook、ComputerBook、LawBook
1.3 实现代码
1) 定义抽象产品类Book,定义具体产品的公共接口
- abstract class Book
- {
- public abstract void Show();
- }
2) 具体产品类继承抽象产品类,定义生产的具体产品
- class ScienceBook extends Book
- {
- @Override
- public void Show() {
- System.out.println("上传了科学类书籍");
- }
- }
- class ComputerBook extends Book
- {
- @Override
- public void Show() {
- System.out.println("上传了计算机类书籍");
- }
- }
- class LawBook extends Book
- {
- @Override
- public void Show() {
- System.out.println("上传了法律类书籍");
- }
- }
3) 定义工厂类Seller,定义创建对应具体产品实例的方法
- class Seller
- {
- public static Book Sell (string bookName)
- {
- switch (bookName) {
- case "科学类书籍":
- return new ScienceBook();
- break;
- case "计算机类书籍":
- return new ComputerBook();
- break;
- case "法律类书籍":
- return new LawBook();
- break;
- default:
- return null;
- break;
- }
- }
- }
4) 客户端通过实例化工厂类,并调用其创建不同目标产品类的实例
- public class SimpleFactoryPattern {
- public static void main(String[] args){
- Seller mSeller = new Seller();
- //卖家上传科学类书籍
- try {
- mSeller.Sell("科学类书籍").Show();
- }catch (NullPointerException e){
- System.out.println("没有这一类书籍");
- }
- //卖家上传计算机类书籍
- try {
- mSeller.Sell("计算机类书籍").Show();
- }catch (NullPointerException e){
- System.out.println("没有这一类书籍");
- }
- //卖家上传法律类书籍
- try {
- mSeller.Sell("法律类书籍").Show();
- }catch (NullPointerException e){
- System.out.println("没有这一类书籍");
- }
- }
- }
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 //修改用户信息并提交
- protected void SubmitInfo(object sender, EventArgs e)
- {
- user.Name = name.Value;
- user.Password = this.password.Value;
- user.Tel = tel.Value;
- user.Address = address.Value;
- if (ServiceUser.Update(user) == true)
- {
- //ServiceUser.userI = user;
- JsHelper.AlertAndRedirect("提交成功", "personalInfo.aspx");
- }
- else
- {
- JsHelper.AlertAndRedirect("提交失败", "#");
- }
- }
2)ServerUser.cs //服务端更新
- public static bool Update(User user)
- {
- updateSignal = DaoUser.Update(user);
- if (updateSignal == true)
- {
- ServiceUser.user = user;
- }
- return updateSignal;
- }
3)DaoUser.cs //数据库端更新
- public static bool Update(User user)
- {
- bool result = false;
- 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);
- int i = SqlHelper.ExecuteNonQuery(Conn, System.Data.CommandType.Text,sql);
- if (i > 0)
- {
- result = true;
- }
- return result;
- }
4)changePersonalInfo.aspx.cs //用户修改界面显示
- protected void Page_Init(object sender, EventArgs e)
- {
- user = ServiceUser.userI;
- this.name.Value = user.Name;
- this.password.Value = user.Password;
- this.tel.Value = user.Tel;
- this.address.Value = user.Address;
- }
5)personalInfo.aspx //用户基本信息界面显示
- protected void Page_Load(object sender, EventArgs e)
- {
- User user = ServiceUser.userI;
- this.name.InnerText = user.Name;
- this.password.InnerText = user.Password;
- this.tel.InnerText = user.Tel;
- this.address.InnerText = user.Address;
- }
2.6 实验结果展示
以修改用户基本信息中的密码为例,进行此模块功能实现结果展示。
1)进入
UI界面首页后,点击右上角导航栏中个人信息栏目,即可跳转到用户基本信息页面。
2)进入用户信息页面(此时用户密码为666999)
3) 此时数据库中,该用户的密码亦为“666999”。
4) 点击快捷操作栏目的“修改用户信息”按钮后,即可跳转到用户信息修改页面,修改用户信息。由图可见,此时用户将密码修改为“123456”。
5)点击下方“提交”按钮即可将新的用户信息传输给数据库,更新用户信息。
6)点击“OK”按钮后回到用户信息基本界面,发现此时用户基本信息中的密码已被修改成123456。
7)此时数据库中该用户基本信息中的密码也已被修改成123456。
图2.6 修改后的数据库用户信息