2023年软件设计模式实验报告_第1页
2023年软件设计模式实验报告_第2页
2023年软件设计模式实验报告_第3页
2023年软件设计模式实验报告_第4页
2023年软件设计模式实验报告_第5页
已阅读5页,还剩38页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

武彦利於勺争

WuhanUniversityofScience&Technology

计算机科学与技术学院

实验报告

课程名称:软件设计模式

专业:计算机科学与技术

班级:2023级1班

学号:___________

姓名:・

实验一单例模式的应用

1实验目的

1)掌握单例模式(Singleton)的特点

2)分析具体问题,使用单例模式进行设计。

2实验内容和规定

很多应用项目都有配置文献,这些配置文献里面定义一些应用需要的参数数

据。

通常客户端使用这个类是通过new一个AppConfig的实例来得到一个操

作配置文献内容的对象。假如在系统运营中,有很多地方都需要使用配置文献的

内容,系统中会同时存在多份配置文献的内容,这会严重浪费内存资源。

事实上,对于AppConfig类,在运营期间,只需要一个对象实例就够了。

那么应当怎么实现呢?用C#控制台应用程序实现该单例模式。绘制该模式的UM

L图。

UML图:

AppConfig

-ParameterA:string

+GetParameterA()

+SetParameterA()

源代码:

c1assProgram

staticvoidMain(stringE]args)

AppConfigappConfigOne=AppConfig.GetParameterA();

AppConfigappConfigTwo=AppConfig.GetParameterA();

if(appConfigOne.Equa1s(appConfigTwo))

(

Console.WriteLine("appConfigOne和appConfigTwo代表的是同一-

个实例!”);

}

eIse

{

Console.WriteLine("appConfigOne和appConfigTwo代表

的是不同的实例!");

)

Console.ReadKey();

)

)

)

运营结果:

■file:〃/C:/Users/LvYong/Desktop/软件设...一口

appConfigOne和appConfigTwo代表的是同一个实例!人

实验小结:

通过这次实验,我了解了单例模式的具体概念和使用方法,并且感受到了他的优点带来的方

便,但是同时也知道了该设计模式的缺陷:由于单例模式中没有抽象层,因此单例类的扩展

有很大困难。

实验二工厂模式的应用

1实验目的

1)掌握工厂模式(Factory)的特点

2)分析具体问题,使用工厂模式进行设计。

2实验内容和规定

有一个OEM制造商代理做HP笔记本电脑(Laptop),后来该制造商得到了更

多的品牌笔记本电脑的订单Acer,Lenovo,Del1,该OEM商发现,假如一次同

时做很多个牌子的本本,有些不利于管理。运用工厂模式改善设计,用C#控制台

应用程序实现该OEM制造商的工厂模式。绘制该模式的UML图。

UML图:

川;CreateLaptop,0小4⑺II是”、U入寮.「小工”

源代码:

classLaptop

pub1icvirtua1voidGetLaptop(){}

)

classHpLaptop:Laptop

(

publicoverridevoidGetLaptop()

{

Console.WriteLine("生产了一台Hp电脑“);

)

)

classAcerLaptop:Laptop

(

publicovertidevoldGetLaptop()

(

Console.WriteLine("生产了一台Acer电脑");

)

)

classLenovoLaptop:Laptop

I

publicoverridevoidGetLaptop()

{

Console.WriteLine("生产了一台Lenovo电脑”);

)

)

cIassDellLaptop:Laptop

publicoverridevoidGetLaptop()

(

Conso1e.WriteLine("生产了一台De11电脑“);

}

}

interfaceIFactory

LaptopCreateFactory();

)

classHpFactory:Il-'cictorv

pub1icLaptopCreateFactory()

returnnewHpLaptop();

}

classAccrFadory:IFactory

pub1icLaptopCreateFactory()

returnnewAcerLaptop();

}

classLonovoFactory:1Factory

publieLaptopCreateFactory()

returnnewLenovoLaptop();

)

}

classDel1Factory:IFactory

(

publicLaptopCreateFactory()

(

returnnewDellLaptop();

}

}

classProgram

(

staticvoidMain(string[]args)

(

II'actorylaptopFactory=newLenovoEactory();

IFactorylaptopFactoryl=newHpFactory();

IVactory1aptopFactory2=newAcerFactory();

IFactory1aptopFactory3=newDe1IFactory();

Laptop1aptop=laptopFactory.CreateFactory();

Laptoplaptop1=1aptopFactoryl.CreateFactory();

Laptop1aptop2=laptopFactory2.CreateFactory0;

Laptop1aptop3=laptopFactory3.CreateFactory();

1aptop.GetLaptop();

1aptopl.GetLaptop();

1aptop2.GetLaptop();

1aptop3.GetLaptop();

Conso1e.ReadKey();

运营结果:

■file:〃/C:/Users/LvYong/Desktop/软件…-

生产了一台Lenouo电脑

生产了一台Hp电脑一

生广了一台Ace嚏胸

生产;一台De11甫启

实验小结:

通过本次实验,我了解了工厂模式的合用范围和他的一些特点,工厂模式在一定限度上解决某

些代码违反了面向对象设计的开放封闭原则。同时还了解了它的一些优点和弊端,比如:使

用工厂方法模式的另一个优点是在系统中加入新产品时,无需修改抽象工厂和抽象产品提供

的接口,无需修改客户端,也无需修改其它的具体工厂和具体产品,而只要添加一个新的具

体工厂和具体产品即可。

实验三抽象工厂模式的应用

1实验目的

1)掌握抽象工厂模式(AbstractFactory)的特点

2)分析具体问题,使用抽象工厂模式进行设计。

2实验内容和规定

麦当劳(MeDonaids)和肯德基(KFC)快餐店都经营汉堡(Hamburg)和

可乐(Cola),用C#控制台应用程序实现这两个快餐店经营产品的抽象工厂模

式。绘制该模式的UML图。

UML图:

由于在同一个UML项目中不能同名,所以改为Factoryl,代码中依然是

Factory

源代码:

interfaceIllamburg

voidHamburgName();

}

classMcDonaldsHamburg:IHamburg

{

publicvoidHamburgName()

(

Console.WriteLine("这是McDonaIdsHamburg");

}

)

classKFCHamburg:IHamburg

(

publicvoidHamburgName()

(

Conso1e.WriteLine(〃这是KFCHamburg〃);

)

)

interfaceICola

(

voidColaName();

)

classMcDonaldsCola:ICola

(

publicvoidColaName()

Conso1e.WriteLine(〃这是McDonaldsCola");

}

)

classKFCCola:1Co1a

publicvoidCo1aName()

(

Console.WriteLine("这是KFCCola");

)

)

interfaceIFactory

(

IHamburgCreateHamburg();

IColaCreateColaO;

)

classMeDonaIdsFactory:IFactory

publieIHamburgCreateHamburg()

(

returnnewMcDonaldsHamburg();

)

publicIColaCreateCola()

(

returnnewMcDonaldsCola();

)

classKi;CFaclory:IFactory

publieIHamburgCreateHamburg()

returnnewKFCHamburg();

)

publicIColaCreateCola()

(

returnnewKFCCola();

}

classProgram

staticvoidMain(string[]args)

(

IFactoryfactory=newKFCFactory0;

IFactoryfactoryl=newMcDonaldsFactory();

THamburghamburgl=factory1.CreateIIamburg();

IColaco1a1=factory1.CreateColaO;

THamburghamburg=factory.CreateHamburg();

ICo1aco1a=factory.CreateColaO;

hamburg.11amburgName();

cola.ColaName();

hamburg1.HamburgName();

co1al.Co1aName();

Console.ReadKey();

)

)

)

运营结果:

S3file:///C:/Users/LvYong/Desktop/^...-n

这悬KFCHamburg人

博国FCCola

这是MeDonaIdsHamburg

这7HMeDonaldsCola

实验小结:

通过本次实验,加深了对抽象工厂模式的理解。抽象工厂提供一个创建一系列相关或互相依

赖对象的接口,而不需指定他们具体的类。抽象工厂同样是存在缺陷的,难以支持新种类的产

品。由于以前对C++不太了解,本次实验加深了对C++的了解,强化了编程能力。理解解

了构造函数,虚函数,纯虚函数,成员函数实现,类之间的继承等含义。但对于函数的调用

问题经常犯错,这在以后的学习中应多加注意和练习。

实验四建造者模式的应用

1实验目的

1)掌握建造者模式(Builder)的特点

2)分析具体问题,使用建造者模式进行设计。

2实验内容和规定

建造者模式是一种创建型模式,它重要是应对项目中一些复杂对象的创建工

作。所谓“复杂对象”,是指此对象中还具有其它的子对象。我们现在定义一个

场景:汽车生产必须包含车轮(Wheel)、油箱(OilBox)和车身(Body),应用建造

者模式,用C#控制台应用程序实现该设计,构建BMW品牌和BenZ品牌汽车

生产。绘制该模式的UML图。

UM注:

抽象

指挥建造

*者

源代码:

pub1icabstractc1ass1Car

(

publicabstractvoidWheel0;

publicabstractvoidOilBox();

publicabstractvoidBody();

}

classBenz:ICar

(

publicoverridevoidWhee1()

(

Conso1e.Write("奔驰的轮子,”);

)

publicoverridevoidOilBox()

Console.Writ。(”奔驰的油箱,〃);

}

pub1icoverridevoidBody()

Console.WriteLine("奔驰的车体!");

)

c1assBMW:ICar

pub1icoverridevoidWhee1()

Console.Write(H宝马的轮子,");

pub!icoverridevoidOilBox()

Console.Write("宝马的油箱,〃);

pub1icoverridevoidBody()

Console.WriteLine("宝马的车体!”);

)

c1assDriver

pub1icvoidinclude(ICarcar)

car.Whee1();

car.OilBox();

car.Body();

}

)

classProgram

(

staticvoidMain(string[]args)

(

ICarcar=newBenz();

ICarcarl=newBMW();

Driv6rzhangsan=newDriver();

zhangsan.inc1ude(car);

Driverlisi=newDriver();

lisi.inc1ude(carl);

Console.ReadKey();

}

运营结果:

■file:///C:/Users/LvYong/Desktop/软彳牛模...~

磐解嚏始糖IWi

实验小结:

建造者模式的设计目的是消除其他对象的复杂创建过程。使用建造者模式

不仅是最佳的做法,并且在某个对象的构建和配制方法改变时可以尽量减少反

复更改代码

实验五适配器模式的应用

1实验目的

1)掌握适配器模式(Adapter)的特点

2)分析具体问题,使用适配器模式进行设计。

2实验内容和规定

一个软件团队开发绘图系统,设计了圆对象(Circ1e)、矩形对象(Rectangl

e),线对象(Line)都支持Draw。函数,即可以通过Draw。函数绘制图形。为

了加快项目进度,将角度对象(Angle)绘制功能交给了合作团队实现。但合作

团队将角度对象绘制函数定为了DrawAngle()。绘图系统提供应用户后,用户不

满意,希望能统一的调用,不用记太多命令。应用适配器模式,用C#控制台应用

程序完善该设计。绘制该模式的UML图。

UML图:

源代码:

abstractclassIDrawing

(

pub1icabstractvoldDraw();

I

classCircle:IDrawing

(

publicoverridevoidDraw()

(

Console.WriteLine("这是Circle里面的Draw方法");

)

)

classRectangle:{Drawing

publicoverridevoidDraw()

Conso1e.WriteLine("这是Rectang1e里面的Draw方法”);

)

}

c1assLine:IDrawing

(

publicoverridevoidDraw()

(

Conso1e.WriteLine("这是Line里面的Draw方法”);

)

}

classAngle

(

pub1icvoidDrawAngleO

(

Console.WriteLine("这是Angle里面的DrawAngle方法”);

)

)

classAdapterAng1e:IDrawing

(

privateAngleag=newAngle();

publicoverridevoidDraw()

(

ag.DrawAng1e();

)

}

classProgram

staticvoidMain(string[]args)

1I)ra\\ingcc=newCircIc();

cc.Draw();

1ngrr=newRecttingle();

rr.Draw();

IDrawing11=newLine();

11.Draw();

IDrawingaa=newAdapterAngle();

aa.Draw();

Conso1e.ReadKey();

)

运营结果:

13file:〃/C:/Users/LvYong/Desktop/软件设tt模...一口

Circle里面的Dravi方虫、*

Rectangle里面的Dkai,方法

,Line里面的Dpaw方法

8这是Angle里面的D»a”Angle方法

实验小结:

适配器模式可以让任何两个没有关联的类一起运营,提高了类的复用,增长了类的透明

度,灵活性好,但是过多的使用适配器,会让系统非常零乱,不易整体进行把握。比如,

明明看到调用的是A接口,其实内部被适配成了B接口的实现,一个系统假如太多余现这种

情况,无异于一场劫难。因此假如不是很有必要,可以不使用适配器,而是直接对系统进行

重构。由于JAVA至多继承一个类,所以至多只能适配一个适配者类,并且目的类必须是

抽象类。

实验六桥接模式的应用

1实验目的

1)掌握桥接模式(Bridge)的特点

2)分析具体问题,使用桥接模式进行设计。

2实验内容和规定

一个咖啡店可以提供大杯(JorumCoffbe)、中杯(MediumCoffee)、小

杯(SmallCoffee)的咖啡(Coffee),为了满足不同用户的口味,在咖啡中可以添

加牛奶(Mi1k),或者糖(Sugar),或者柠檬(Lemon),提供应用户不同口味的组

合,如大杯咖啡加牛奶,中杯咖啡加糖,小杯咖啡加柠檬,小杯咖啡加糖等。应用

桥接模式,用C#控制台应用程序实现该设计。绘制该模式的UML图。

UML图:

咖啡调料

源代码:

abstractclassSauce

publieabstractvoidMixing();

)

classMi1k:Sauce

(

publicoverridevoidMixing()

(

Console.WriteLine(〃加牛奶”);

}

)

c1assSugar:Sauce

(

publicoverridevoidMixing()

(

Console.WriteLine(“加糖〃);

)

}

classLemon:Sauce

(

publicoverridevoidMixing()

{

Conso1e.WriteLine("加柠檬〃);

}

)

abstractclassCoffee

protectedSaucesauce;

publicvoidAddSauce(Saucesauce)

(

this.sauce=sauce;

)

publicabstractvoidMixing();

classJorumCoir('c:Cof「co

publicoverridevoidMixing()

(

Console.Write("大杯咖啡");

sauce.Mixing();

}

)

c1assMediumCoffee:Coffee

(

publicoverridevoidMixingO

(

Console.Write("中杯咖啡");

sauce.Mixing();

)

)

classSmallCon'ee:Coflee

publieoverridevoidMixing()

Conso1e.Write("小杯咖啡〃);

sauce.Mixing();

)

}

classProgram

(

staticvoidMain(string[]args)

(

〃中杯咖啡加牛奶

Coffeecoffee0ne=newMediumCoffee();

coffee0ne.AddSauce(newMi1k());

coffee0ne.Mixing();

//大杯咖啡加糖

CoffeecoffeeTwo=newJorumCoffee();

coffeeTwo.AddSauce(newSugar());

coffeeTwo.Mixing();

〃小杯咖啡加糖

CoffeecoffeeThree=newSma1ICoffee();

coffeeThree.AddSauce(newLemon());

coffeeThree.MixingO;

Console.ReadKey();

)

}

运营结果:

■file:〃/C:/Users/LvYong/Desktop/软件…n

加牛奶

小林痂琲;加加糖停檬

实验小结:

Bridge模式是一个非常有用的模式,也非常复杂,它很好的符合了开放-封闭原则和优

先使用对象,而不是继承这两个面向对象原则。该模式使用''对象间的组合关系”解耦了抽象

和实现之间固有的绑定关系,使得抽象和实现可以沿着各自的维度来变化。

实验七装饰模式的应用

1实验目的

1)掌握装饰模式(Decorator)的特点

2)分析具体问题,使用装饰模式进行设计。

2实验内容和规定

“喜羊羊逃命,,游戏:喜羊羊被灰太狼追,喜羊羊最多5条命,灰太狼每咬到

喜羊羊一次,喜羊羊就要少一条命。在逃的过程中喜羊羊可以吃到三种苹果,吃“红

苹果”可以给喜羊羊加上保护罩,吃“绿苹果”可以加快喜羊羊奔跑速度,吃“黄苹

果''可以使喜羊羊趟着水跑。应用装饰模式,用C#控制台应用程序实现该设计。

绘制该模式的UML图。

UML图:

源代码:

abstractclassState

publicabstractvoidShow();

}

classAnima1:State

!

privatestringname;

pub1icAnimal(stringname)

(

this,name=name;

}

pub1icoverridevoidShow()

{

Conso1e.WriteLine("的{0}〃,name);

)

)

abstractclassApple:State

protectedStatecomponent;

publievoidDecorator(Statecomponent)

(

this.component=component;

)

publicoverridevoidShow()

(

if(component!=nu11)

(

component.Show();

}

)

)

classProtectiveCover:Apple

(

publicoverridevoidShow()

(

//base.Show();

Console.Write(“有保护罩");

base.Show();

)

)

classRunl;?isi:Apple

publicoverridevoidShow()

(

//base.ShowO;

Console.Write(“跑得快、");

base.Show();

}

)

classFlowingWater:Appie

{

publicoverridevoidShow()

(

//base.Show();

Console.Write("会趟水、");

base.Show();

}

)

classProgram

(

staticvoidMain(string[]args)

(

Animalpleasantsheep=newAninia1("喜羊羊");

ProIectiveCoverpc=newProtectiveCover();

RunFastrf=newRunFast();

FlowingWaterfw=newFlowingWater();

pc.Decorator(p1easantsheep);

rf.Decorator(pc);

fw.Decorator(rf);

fw.Show();

Conso1e.ReadKey();

}

}

)

运营结果:

-file:///C:/Users/LvYong/Desktop儆件设...-口

会趟水、跑得快、有保护罩的喜羊羊A

实验小结:

Decorator模式采用对象组合而非继承的手法,实现了在运营时动态的扩展对象功能的能

力,并且可以根据需要扩展多个功能,避免了单独使用继承带来的''灵活性差"和''多子类衍生

问题同时它很好地符合面向对象设计原则中''优先使用对象组合而非继承"和''开放-封

闭”原则。

实验八外观模式的应用

1实验目的

1)掌握外观模式(Facade)的特点

2)分析具体问题,使用外观模式进行设计。

2实验内容和规定

一个保安系统的,由录像机、电灯、红外线监控和警报器组成。保安系统的操

作人员需要经常将这些仪器启动和关闭。保安类需要用到所有的录像机(Came

ra)、电灯(Light)、感应器(Sensor)和警报器(A1arm)对象,保安觉得使

用不方便。应用外观模式,用C#控制台应用程序改善该设计。绘制该模式的UM

L图。

UML图:

源代码:

publicclassCamera

pub1icvoidTurn0n()

Console.WriteLine("Turningonthecamera.H);

}

pub1icvoidTurnOff()

Console.WriteLine("Turningofftheearnera.〃);

}

publicvoidRotate(intdegrees)

Console.WriteLine("Rotatingthecameraby{0}degrees.z,,d

grees);

}

)

publicc1assLight

(

publievoidTurnOff()

(

Console.WriteLine(〃Turningonthe1ight.;

}

pub1icvoidTurnOn()

(

Conso1e.WriteLine("Turningoffthelight.〃);

}

publicvoidChangeBu1b()

(

Console.WriteLine(Hchangingthe1ight-bulb.");

)

)

publicc1assSensor

pub1icvoidActivateO

Console.WriteLine("Activatingthesensor.;

publievoidDeactivate()

Console.WriteLine(〃Deactivatingthesensor.z,);

publicvoidTrigger()

Console.WriteLine("Thesensorhastriggered.");

publicclassAlarm

publicvoidActivateO

Conso1e.WriteLine(HActivatingthealarm.n);

publicvoidDeactivate()

Conso1e.WriteLine("Deactivatingthea1arm.");

)

publievoidRing()

(

Console.WriteLine("Ringingthealarm.");

}

pub1icvoidStopRingO

Console.WriteLine(z,Stopthea1arm.");

)

pub1icc1assSecurityFacade

privatestaticCameracamera1,camera2;

privatestaticLight1ight1,light2,1ight3;

privatestaticSensorsensor;

privatestaticAlarmalarm;

staticSecurityFacade()

(

camera1=newCamera();

camera2=newCamera();

lightl=newLight();

1ight2=newLight();

1ight3=newLight();

sensor=newSensor();

alarm=newAlarm();

}

publicvoidActivate()

(

cameral.TurnOn();

camera2.TurnOn();

1ight1.TurnOn();

light2.TurnOn();

light3.TurnOn();

sensor.Activate();

alarm.Activate();

)

publicvoidDeactivate()

(

camera1.TurnOff();

camera2.TurnOff();

lightl.TurnOff();

light2.TurnOff();

light3.Turn0ff();

sensor.Deactivate();

alarm.Deactivate();

}

)

classProgram

(

staticvoidMain(string[]args)

SecurityFacadesecurity;_

security=newSecurityFacade()

security.Activate();_

Conso1e.WriteLine(z,\n--------------------------\n〃);

security.Deactivate();

Console.ReadKey();

)

)

运营结果:

•file:〃/C:/Users/LvYong/Desktop儆件'Sti■模...一口

Turning?on?the?canera.A

Turning?on?the?canera.

Turning?off?the?light.

Turning?off?the?light.

Turning?o£f?the?light.

Actiuating?the?sensoi*.

Actiuating?the?alarn.

Turning?off?the?canera.

Turning?off?the?canera.

Turning?on?the?light.

Turning?on?the?light.

Turning?on?the?light.

Deactiuating?the?sensoi*.

Deactiuating?the?alarm.

搜狗拼音输入法半:V

<>J

实验小结:

Fagade模式注重的是简化接口,它更多的时候是从架构的层次去看整个系统,而并非单个

类的层次。该模式对客户屏蔽了子系统组件,因而减少了客户解决的对象的数目并使得子系

统使用起来更加方便。实现了子系统与客户之间的松耦合关系,而子系统内部的功能组件往

往是紧耦合的。松耦合关系使得子系统的组件变化不会影响到它的客户。

实验九观测者模式的应用

1实验目的

1)掌握外观模式(Observer)的特点

2)分析具体问题,使用外观模式进行设计。

2实验内容和规定

网上商店中假如商品(product)在名称(name)、价格(price)等方面有

变化,系统能自动告知会员,将是网上商店区别传统商店的一大特色。如何设计实

现?说明你所选择的设计模式,画出类关系图并指明各个类的角色。应用外观模

式,用C#控制台应用程序改善该设计。绘制该模式的UML图。

UMM:

源代码:

publicclassProduct

(

pub1icstringname;

publiestringprice;

publicProduet(strings_name,stringsprice)

(

name=s_name;

price=s_price;

)

pub1icProduct()

(

name=nul1;

price=nul1;

)

)

c1assShopSystem

(

privateIList<MemberObserver>observers=newList<M

emberObserver>();

publicIList<Product>products=newList<Product>();

publicShopSystem(IList<Product>pro)

(

products=pro;

}

privatestringaction;

publicvoidAttach(Member0bserverobserver)

(

observers.Add(observer);

}

publievoidDetach(MemberObserverobserver)

(

observers.Remove(observer);

}

publicvoidNotify()

foreach(MemberObservermoinobservers)

mo.Update();

)

pubIicstringProductAction

(

get

(

action=null;

foreach(Productpinproducts)

(

if(p.name!=nul1二p.price!=null)

{

action+=p.name+”的价格变成了"+p.pric

e+"\n”;

)

)

returnaction;

)

set

{

action=value;

}

)

)

classMemberObserver

privatestringname;

privateShopSystemsub;

publicMemberObserver(stringname,ShopSystemsub)

(

this.name=name;

this,sub=sub;

)

publicvoidUpdate()

{

Conso1e.WriteLine("{0}请注意!{1}”,sub.ProductAction,na

me);

)

)

classProgram

(

staticvoidMain(string[]args)

(

ProductproductOne=newProduct();

ProductproductTwo=newProduct("衬衫〃,T25元/件”);

ProductproductThree=newProduct("短袖","60元/件")

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论