简单工厂的使用(图书管理系统)

简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。简单工厂模式是工厂模式家族中最简单实用的模式,可以理解为是不同工厂模式的一个特殊实现。

场景:有一个图书管理系统,需要进行书本管理,所有对书本的操作都进行归类,大致可以分成入账、预定、借用、续借、归还、领料、清退、转移、核销等操作,每一次的操作认为是一个订单,订单有创建,审批、取消、拒绝等状态、每一个订单包含一个或者以上的书本信息,简单工厂,先根据订单类型来创建完订单,需要先构建好入参,如下所示 strUserDoc 主要是当前操作人信息(用户上下文),strBillDoc为订单信息,订单号、类型、订单状态等,strBooks包含订单的书本信息

//创建订单
var oBill = GetOperationType(strUserDoc, strBillDoc, strBooks);

//获取订单类型
 var strOperaType =oBillDoc.GetStrValue(TBLBill.PROP_OPERATE_TYPE);

//初始化订单
switch (strOperaType)
{
      case TBLBill.TYPE_BOOK:
           oBill = new Book(strUserDoc, strBillDoc, strBooks);
            break;
      case TBLBill.TYPE_LEND:
            oBill = new Lend(strUserDoc, strBillDoc, strBooks);
             break;
      case TBLBill.TYPE_RENEW:
            oBill = new Renew(strUserDoc, strBillDoc, strBooks);
            break;
      case TBLBill.TYPE_RETURN:
             oBill = new Return(strUserDoc, strBillDoc, strBooks);
             break;
      case TBLBill.TYPE_CLEAR:
             oBill = new Clear(strUserDoc, strBillDoc, strBooks);
              break;
      case TBLBill.TYPE_DELETE:
             oBill = new Delete(strUserDoc, strBillDoc, strBooks);
             break;
      case TBLBill.TYPE_PICK:
             oBill = new Pick(strUserDoc, strBillDoc, strBooks);
              break;
      case TBLBill.TYPE_MOVE:
             oBill = new Move(strUserDoc, strBillDoc, strBooks);
              break;
      case TBLBill.TYPE_TRANSFER:
             oBill = new Transfer(strUserDoc, strBillDoc, strBooks);
             break;
      case TBLBill.TYPE_RECORD:
             oBill = new Record(strUserDoc, strBillDoc, strBooks);
              break;
       default:
            oBill.res.ErrCode = "这是什么操作~";
             break;
}

创建订单时,先对当前操作人权限进行验证,操作对象是否能操作对应的数据,文书信息等是否能进行对应的操作等进行一系列验证,验证完毕后,创建好订单,然后在订单中增加书本信息,根据订单的状态,修改对应文书最新状态

    /// <summary>
    /// 基础订单(图书馆操作系统)
    /// </summary>
    public abstract class BaseBill
    {
        #region
        /// <summary>
        /// 原始订单信息
        /// </summary>
        public BsonDocument oOriginalBill { get; set; }
        /// <summary>
        /// 处理的订单信息
        /// </summary>
        public BsonDocument oHandleBillDoc { get; set; }

        /// <summary>
        /// 书本信息
        /// </summary>
        public List<BsonDocument> lstBooks { get; set; }

        /// <summary>
        /// 用户上下文
        /// </summary>
        public UserContext userContext { get; set; }
        #endregion

        #region 构造函数
        protected BaseBill() { }

        protected BaseBill(string strUserDoc, string strBillDoc, string strBooks)
        {
            this.userContext = new UserContext(strUserDoc);
            this.oOriginalBill = JsonToBson(strBillDoc);
            this.oHandleBillDoc = this.oOriginalBill.CopyTo();
            this.lstBooks = getBooks(strBooks);
        }
        #endregion

        #region 订单基础操作

        /// <summary>
        /// 验证用户是否有权限/合法等
        /// </summary>
        public virtual void ValidateUser() { }

        /// <summary>
        /// 验证物料是否存在,是否能被借出/归还等
        /// </summary>
        public virtual void ValidateBooks() { }

        /// <summary>
        /// 创建订单
        /// </summary>
        public virtual void AddBill() { }

        /// <summary>
        /// 增加订单书本
        /// </summary>
        public virtual void AddDevicesBill() { }

        /// <summary>
        /// 根据订单状态修改竖纹状态
        /// </summary>
        public virtual void ModefyStatus() { }

        /// <summary>
        /// 结果信息发送
        /// </summary>
        public virtual void SendMessage() { }
        #endregion
    }

    /// <summary>
    /// 预定
    /// </summary>
    public class Book : BaseBill
    {

    }
    /// <summary>
    /// 借出操作
    /// </summary>
    public class Lend : BaseBill
    {

    }
    /// <summary>
    /// 续借操作
    /// </summary>
    public class Renew : BaseBill
    {

    }

    /// <summary>
    /// 归还操作
    /// </summary>
    public class Return : BaseBill
    {

    }

    /// <summary>
    /// 核销操作
    /// </summary>
    public class Delete : BaseBill
    {

    }

    /// <summary>
    /// 清退操作
    /// </summary>
    public class Clear : BaseBill
    {

    }

    /// <summary>
    /// 领料操作
    /// </summary>
    public class Pick : BaseBill
    {

    }

    /// <summary>
    /// 入账操作
    /// </summary>
    public class Record : BaseBill
    {

    }

原文地址:https://www.cnblogs.com/singlelcx/p/11240681.html

时间: 2024-10-10 04:36:15

简单工厂的使用(图书管理系统)的相关文章

易学设计模式看书笔记(2) - 简单工厂模式

本文摘自易学设计模式一书 一.简单工厂模式 1.动物管理系统的例子 public interface Animal{ public void eat(); } public class Tiger implements Animal { public void eat(){ sysout.out.println("老虎会吃"); }; public void run(){ sysout.out.println("老虎会跑"); }; } public class D

jsp数据库增删改查——简单的图书管理系统网页版

登录(指定登录号密码的简单判断): 1 <%@ page language="java" import="java.sql.*" pageEncoding="gb2312"%> 2 <html> 3 <head> 4 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">

简单的图书管理系统

自写的极其简陋的图书管理系统,代码不太规范,在学习中慢慢改 现在还存在两个问题: 1.还书还的是null2.借书传的不是书的编号 在周末之前解决 如有疑问或建议欢迎留言 LibMain.java import java.util.Scanner; /* * * 图书管理系统 * 1.登录和注册 * 2.登录成功后 * a.显示所有图书列表 添加 查询 修 删除 * b.借阅图书 需要绑定借阅人账号 * c.查看已借阅图书列表 归还图书 * 3.退出当前登录的账号 */ public class

图书管理系统-python简单实现

import sys books=[['红楼梦','曹雪芹',50],['三国义','罗贯中',55],['西游记','吴承恩',60],['水浒传','施耐庵',65]] users=[['Tom','123'],['Mike','321']] flag=False def login(): print('请输入用户名:',end='') username=input() print('请输入用户密码:',end='') password=input() if [username,passwo

制作简单的图书管理系统

1 package libray; 2 3 import java.sql.Connection; 4 import java.sql.DriverManager; 5 import java.sql.ResultSet; 6 import java.sql.SQLException; 7 import java.sql.Statement; 8 9 public class DbConn { 10 11 private static final String DRIVER="com.mysql

脚踏实地 志存高远-快意图书管理系统开发侧记之二

以网络技术为主的信息技术的飞速发展,使得图书管理信息化向着更加智能.快捷的方向不断变革.原有的一批图书管理软件的处理模式.软件架构.操作流程已不能满足网络时代所要求的双向互动.信息共享.高度智能的操作诉求.快意团队于2011年10月成立,并在调研数家企事业单位.大中专学校.中小学校图书管理业务流程及需求的基础上,研制了快意图书管理综合解决方案,开发了快意图书综合管理软件,并针对不同行业特点,进行了差异化开发,推出了快意图书管理企事业版本,中小学版本.大中专院校等多个版本,为不同行业图书管理提供了

图书管理系统

该图书馆里系统能实现基本的对图书信息的操作和借阅.归还功能. 一.主要内容: 本课程设计结合本学期所学C语言知识,数组.函数.结构体.指针.链表.文件读取操作等等,准备设计开发一个简单的图书管理系统.设计开发这个系统需要用到链表.文件读取操作.结构体.函数.指针.等C语言知识.本课程设计将会实现对图书信息的账号登录.注册账号.密码修改.密码查找.查找.输出.排序.备份.恢复.图书借阅和归还功能.本着简单.易用的设计原则,本课程设计在尽量优化界面在保证输入输出美观的同时又不失友好的交互界面. 本次

设计模式(一)——简单工厂模式

嵌入式linux 设计模式(一)--简单工厂模式 一.简单工厂模式简介 1.简单工厂模式 简单工厂模式(Factory Method Pattern)是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,是通过专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类.简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例. 简单工厂模式的UML类图 工厂角色(Creator):是简单工厂模式的核心,由它负责创建所有的类的内部逻辑.工厂类必须能够被

简单工厂方法

简单工厂模式解释: 简单工厂模式(Simple Factory Pattern)属于类的创建型模式,又叫静态工厂方法模式(Static FactoryMethod Pattern),是通过专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类. 简单工厂模式的UML图: 简单工厂模式中包含的角色及其相应的职责如下: 工厂角色(Creator):这是简单工厂模式的核心,由它负责创建所有的类的内部逻辑.当然工厂类必须能够被外界调用,创建所需要的产品对象. 抽象(Product)产品角