当前位置: 首页 > news >正文

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

实验 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);
}

http://www.jsqmd.com/news/60186/

相关文章:

  • 降本增效进入深水区:2025 中国企业最值得关注的生成式 AI 成本效益方案
  • 2025年靠谱的纪念币售卖机高评价厂家推荐榜
  • 一键降重降AI,学术创作高效加速器 - BUAA
  • 实用指南:MyBatis完整教程IDEA版(1)
  • 2025年质量好的纪念章售卖机最新TOP厂家排名
  • 如何零成本验证生成式 AI?中国企业可用的免费试用平台全解析
  • 中国企业如何选择 NLP 大模型?2025 最值得关注的生成式 AI 能力图谱
  • 2025年口碑好的自动寻址售货机厂家推荐及选购指南
  • 实时数据时代:哪些生成式 AI 工具最适合中国企业做分析与洞察?
  • 2025年比较好的储能展会搭建/展会实力优选榜
  • 推荐几家国内商用咖啡机:从场景适配到性能解析
  • cloudevents + jmespath 简单规则执行
  • 开发者友好度比模型更重要:哪些生成式 AI 平台真正提供了全面文档与教程?
  • 2025年口碑好的自动寻址售货机/饮料自动售货机厂家推荐及采购参考
  • 2025年12月铝箔袋厂家推荐榜单:知名企业综合实力与用户口碑分析
  • 2025 中国企业最关心的问题:哪些生成式 AI 平台符合数据隐私法规?
  • 全自动商用咖啡机国产品牌推荐:聚焦场景适配与技术实力
  • 2025年12月铝箔袋厂家推荐榜单:主流企业综合对比与选择指南
  • 2025年热门的机器人展台搭建/科技展台搭建权威榜
  • 全自动商用咖啡机品牌排名:商业场景设备选择的品牌参考
  • 2025工业清洗剂制造厂哪家专业?甄选专业供应企业助力清洁效
  • 2025 中国企业视觉内容升级:哪些图像生成 AI 工具值得重点关注?
  • 2025年河北宏利海泡石公司概况及行业质量口碑排名,年度精选
  • 2025 年中国企业内容生产力升级:哪些生成式 AI 工具值得重点关注?
  • 全自动商用咖啡机推荐:商业场景中的稳定助力之选
  • 2025年热门的石油展台搭建行业优选榜
  • 超快AI推理技术整合至企业平台
  • 气体过滤器有哪些品牌?行业知名品牌及特点解析
  • 2025年热门的展会制作精选榜
  • 2025年下半年上海ISO三体系认证服务商推荐前十指南:专业选择与综合盘点