农场类

//定义农场类
// 农场里包含n棵作物,n由用户动态输入
// 作物信息包括:名称、收获果实个数、每个果实售价
// 班级类里提供成员函数sum,其用途是统计该农场所有果实的销售收入。
//
// 测试流程:
// 1、用户输入作物数n
// 2、输入n棵学生的名称、果实个数、每果售价
// 3、输出该农场所有果实的销售收入
#include <iostream>
#include <cstring>
using namespace std;
class Crop{
public:
char crop_name[10];
int crop_num;
int crop_prize;
void set_crop(char *s,int n,int p);
};
void Crop::set_crop(char *s,int n,int p){
strcpy(crop_name,s);
crop_num=n;
crop_prize=p;
}
class Farm{
private:
Crop * n;
int N;
Crop name;
public:
void set_farm();
void sum();


};
void Farm::set_farm(){
cout<<"请输入农场作物数量:\n";
int m;
cin>>m;
this->N=m;
n=new Crop[m];
for (int i=0;i<m;i++)
{
cout<<"请输入第"<<i+1<<"个作物的名称,果实个数,单价\n";
cin>>n[i].crop_name>>n[i].crop_num>>n[i].crop_prize;
}
}
void Farm::sum(){
int s=0;
for (int i=0;i<this->N;i++)
{
s+=n[i].crop_num*n[i].crop_prize;
}
cout<<"总价:"<<s<<endl;
}
int main(){
Farm f;
f.set_farm();
f.sum();
return 0;
}
### 使用抽象工厂模式设计农场 #### 1. 抽象工厂模式的核心概念 抽象工厂模式提供了一个创建一系列相关或依赖对象的接口,而无需指定它们的具体。在这种情况下,我们将通过抽象工厂模式来设计一个农场。 - **抽象工厂 (Abstract Factory)**: 定义了用于创建各种产品的接口。 - **具体工厂 (Concrete Factory)**: 实现了抽象工厂中的方法,用来生产具体的产品。 - **抽象产品 (Abstract Product)**: 是所有具体产品共同遵循的规范。 - **具体产品 (Concrete Product)**: 是由具体工厂生产的实际产品。 以下是基于上述原则的一个示例代码: --- #### 2. 示例代码 ```java // 抽象产品A:动物 public interface IAnimal { void makeSound(); } // 具体产品A1:狗 public class Dog implements IAnimal { @Override public void makeSound() { System.out.println("Dog barks"); } } // 具体产品A2:猫 public class Cat implements IAnimal { @Override public void makeSound() { System.out.println("Cat meows"); } } // 抽象产品B:植物 public interface IPlant { void grow(); } // 具体产品B1:树 public class Tree implements IPlant { @Override public void grow() { System.out.println("Tree grows tall"); } } // 具体产品B2:花 public class Flower implements IPlant { @Override public void grow() { System.out.println("Flower blooms beautifully"); } } // 抽象工厂 public abstract class AbstractFarmFactory { public abstract IAnimal createAnimal(); public abstract IPlant createPlant(); } // 具体工厂1:城市农场 public class UrbanFarmFactory extends AbstractFarmFactory { @Override public IAnimal createAnimal() { return new Dog(); // 城市农场养狗 } @Override public IPlant createPlant() { return new Flower(); // 城市农场种植花 } } // 具体工厂2:乡村农场 public class RuralFarmFactory extends AbstractFarmFactory { @Override public IAnimal createAnimal() { return new Cat(); // 乡村农场养猫 } @Override public IPlant createPlant() { return new Tree(); // 乡村农场种植树 } } // 测试客户端 public class FarmTest { public static void main(String[] args) { AbstractFarmFactory urbanFarm = new UrbanFarmFactory(); AbstractFarmFactory ruralFarm = new RuralFarmFactory(); IAnimal urbanAnimal = urbanFarm.createAnimal(); IPlant urbanPlant = urbanFarm.createPlant(); IAnimal ruralAnimal = ruralFarm.createAnimal(); IPlant ruralPlant = ruralFarm.createPlant(); urbanAnimal.makeSound(); // 输出:Dog barks urbanPlant.grow(); // 输出:Flower blooms beautifully ruralAnimal.makeSound(); // 输出:Cat meows ruralPlant.grow(); // 输出:Tree grows tall } } ``` --- #### 3. UML 图解释 以下是该设计对应的 UML 图说明: - `IAnimal` 和 `IPlant` 是两个不同的抽象产品接口。 - `Dog`, `Cat`, `Tree`, `Flower` 是对应的具体产品实现。 - `AbstractFarmFactory` 提供了创建这些产品的通用接口。 - `UrbanFarmFactory` 和 `RuralFarmFactory` 是具体工厂,分别负责创建适合的城市和乡村环境下的产品组合。 ![UML Diagram](https://via.placeholder.com/800x400?text=Abstract+Factory+Pattern+Diagram) > 注:由于无法直接绘制图形,请参考标准的抽象工厂模式 UML 结构[^2]。 --- #### 4. 关键点解析 - **扩展性**: 如果需要新增一种型的农场(比如高科技农场),只需添加新的具体工厂即可,原有代码不需要修改[^1]。 - **灵活性**: 不同的工厂可以根据需求自由选择要生产的具体产品型。 - **缺点**: 当需要增加新产品时(例如新种的动物或植物),所有工厂都需要相应调整。 --- ####
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值