尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

软件设计实验24,25:模板方法模式,模板方法模式

软件设计实验24,25:模板方法模式,模板方法模式
📅 发布时间:2026/6/20 5:37:35

实验 24:模板方法模式
本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:
1、理解模板方法模式的动机,掌握该模式的结构;
2、能够利用模板方法模式解决实际问题。

[实验任务一]:数据库连接
对数据库的操作一般包括连接、打开、使用、关闭等步骤,在数据库操作模板类中我们定义了connDB()、openDB()、useDB()、closeDB()四个方法分别对应这四个步骤。对于不同类型的数据库(如SQL Server和Oracle),其操作步骤都一致,只是连接数据库connDB()方法不同,现使用模板方法模式对其进行设计。
实验要求:
1.画出对应的类图;
2.提交源代码;
3.注意编程规范。

image

public abstract class DBOperator {
public abstract void connDB();
public void openDB() {
System.out.println("打开数据库");
}
public void useDB() {
System.out.println("使用数据库");
}
public void closeDB() {
System.out.println("关闭数据库");
}
public void process() {
this.connDB();
this.openDB();
this.useDB();
this.closeDB();
}
}

public class OracleDBOperator extends DBOperator{

@Override
public void connDB() {// TODO Auto-generated method stubSystem.out.println("连接Oracle数据库");
}

}

public class SQLServerDBOperator extends DBOperator{

@Override
public void connDB() {// TODO Auto-generated method stubSystem.out.println("连接SQLServer数据库");
}

}

public class Client {

public static void main(String[] args) {// TODO Auto-generated method stubDBOperator db;db=new OracleDBOperator();db.process();System.out.println("-----------------");db=new SQLServerDBOperator();db.process();
}

}

实验 25:访问者模式
本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:
1、理解访问者模式的动机,掌握该模式的结构;
2、能够利用访问者模式法解决实际问题。

[实验任务一]:打包员
在我们课堂上的“购物车”的例子中,增加一个新的访问者:打包员,负责对购物车中货物装包。
实验要求:
1.画出对应的类图;
2.提交源代码;
3. 注意编程规范。

image

include

include

include

using namespace std;

class Product;
class Book;
class Apple;

class Visitor
{
protected:
string name;
public:
void SetName(string name) {
this->name = name;
}
virtual void Visit(Apple *apple) {};
virtual void Visit(Book *book) {};
};

class Product
{
public:
// Methods
virtual void Accept(Visitor *visitor) {};
};

// "ConcreteElement"
class Apple : public Product {
public:

void Accept(Visitor *visitor) {
visitor->Visit(this);
}
};

class Book :public Product {
public:
void Accept(Visitor* visitor) {
visitor->Visit(this);
}
};

class Customer : public Visitor {
public:
void Visit(Book *book) {
cout << "顾客" << name << "买书" << endl;
}

void Visit(Apple *apple) {
cout << "顾客" << name << "选苹果" << endl;
}
};

class Saler : public Visitor {
public:
void Visit(Book *book) {
cout << "收银员" << name << "直接计算书的价格" << endl;
}

void Visit(Apple *apple) {
cout << "收银员" << name << "给苹果过秤,然后计算其价格" << endl;
}
};

class Packer : public Visitor {
public:
void Visit(Book *book) {
cout << "打包员" << name << "给书打包" << endl;
}

void Visit(Apple *apple) {
cout << "打包员" << name << "给苹果打包" << endl;
}
};

// "ObjectStructure"
class BuyBasket
{
private:
list<Product*> products;

public:

void Attach(Product *product)
{
products.push_back(product);
}

void Detach(Product *product)
{
products.remove(product);
}

void Accept(Visitor visitor)
{
for (std::list<Product
>::iterator it = products.begin(); it != products.end(); ++it)
(*it)->Accept(visitor);
}
};

int main()
{
BuyBasket *buybasket = new BuyBasket();

Product* apple = new Apple();
Product* book = new Book();

buybasket->Attach(apple);
buybasket->Attach(book);

Customer customer = new Customer();
customer->SetName("张三");
Saler
saler = new Saler();
saler->SetName("李四");
Packer* packer = new Packer();
packer->SetName("王五");

// Employees are visited
cout << "----customer----" << endl;
buybasket->Accept(customer);

cout << "----saler----" << endl;
buybasket->Accept(saler);

cout << "----packer----" << endl;
buybasket->Accept(packer);
}

相关新闻

  • 2025年靠谱的纪念币售卖机高评价厂家推荐榜
  • 一键降重降AI,学术创作高效加速器 - BUAA
  • 如何零成本验证生成式 AI?中国企业可用的免费试用平台全解析

最新新闻

  • 终极指南:跨平台获取macOS系统镜像的完整解决方案
  • 深入解析MC68HC908AS32A SPI模块:从寄存器配置到中断与错误处理实战
  • CANN/ops-math Mod取模算子
  • TheRouter实战指南:从基础配置到高级功能解析
  • Flux脚本语言开发指南:从入门到精通的完整学习路径
  • XXPermissions:Android权限管理的终极解决方案与实战指南

日新闻

  • 信任的进化:技术实现详解——如何用JavaScript构建博弈论模拟器
  • Terrakube自定义工作流:如何集成OPA、Infracost等工具扩展IaC能力
  • grunt-concurrent快速入门:5分钟学会并行运行Grunt任务

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号