计算机科学与技术学院实验报告课程名称:软件设计模式专业:计算机科学与技术班级:班学号:姓名:实验一单例模式的应用1 实验目的1) 掌握单例模式(Singleton)的特点2) 分析具体问题,使用单例模式进行设计。
2 实验内容和要求很多应用项目都有配置文件,这些配置文件里面定义一些应用需要的参数数据。
通常客户端使用这个类是通过new一个AppConfig的实例来得到一个操作配置文件内容的对象。
如果在系统运行中,有很多地方都需要使用配置文件的内容,系统中会同时存在多份配置文件的内容,这会严重浪费内存资源。
事实上,对于AppConfig类,在运行期间,只需要一个对象实例就够了。
那么应该怎么实现呢?用C#控制台应用程序实现该单例模式。
绘制该模式的UML图。
[代码截图]:namespace实验一_单例模式_{class Program{static void Main(string[] args){AppConfig appc1 = AppConfig.GetAppConfig();AppConfig appc2 = AppConfig.GetAppConfig();appc1.SetParameterA("hello");appc2.SetParameterA("hi");if (appc1.Equals(appc2)){Console.WriteLine("appc1 和 appc2 代表的是同一个实例");}else{Console.WriteLine("appc1 和 appc2 代表的是不同实例"); }Console.WriteLine(appc1.GetParameterA());Console.WriteLine(appc2.GetParameterA());Console.ReadKey();}}public class AppConfig{private string ParameterA;private static AppConfig appc = null;//1:私有化构造方法,便于在内部控制创建实例的数目private AppConfig(){ }public static AppConfig GetAppConfig(){if (appc == null) {appc = new AppConfig();}return appc;}public string GetParameterA() {return ParameterA;}public void SetParameterA(string ParameterA) { this.ParameterA = ParameterA;}}[运行结果]:实验二工厂模式的应用1 实验目的1) 掌握工厂模式(Factory)的特点2) 分析具体问题,使用工厂模式进行设计。
2 实验内容和要求有一个OEM制造商代理做HP笔记本电脑(Laptop),后来该制造商得到了更多的品牌笔记本电脑的订单Acer,Lenovo,Dell,该OEM商发现,如果一次同时做很多个牌子的本本,有些不利于管理。
利用工厂模式改善设计,用C#控制台应用程序实现该OEM制造商的工厂模式。
绘制该模式的UML图。
[代码截图]:abstract class Laptop {private string laptopName;public abstract string produce();}class HP : Laptop { // Acer、Lenovo、Dell类似public override string produce() {return ("成产HP电脑");}}// 工厂方法interface LaptopFactory{Laptop CreateLaptop();}// 专门负责生产“HP”的工厂class HPFactory:LaptopFactory // Acer、Lenovo、Dell类似{public Laptop CreateLaptop(){return new HP();}}static void Main(string[] args){LaptopFactory lapf= new HPFactory();Laptop lap = lapf.CreateLaptop();Console.WriteLine("结果是:" + lap.produce());LaptopFactory lapf2 = new AcerFactory();lap = lapf2.CreateLaptop();Console.WriteLine("结果是:" + lap.produce());Console.ReadKey();}[运行结果]:实验三抽象工厂模式的应用1 实验目的1) 掌握抽象工厂模式(Abstract Factory)的特点2) 分析具体问题,使用抽象工厂模式进行设计。
2 实验内容和要求麦当劳(McDonalds)和肯德基(KFC)快餐店都经营汉堡(Hamburg)和可乐(Cola),用C#控制台应用程序实现这两个快餐店经营产品的抽象工厂模式。
绘制该模式的UML图。
[代码截图]://汉堡(“可乐”与此类似)interface Hamburg{string produceHamburg();}class KFChb: Hamburg{public string produceHamburg(){return ("KFC Hamburg");}}class McDonaldshb : Hamburg{public string produceHamburg(){return ("McDonalds Hamburg");}}interface FoodFactory{Hamburg CreateHamburg();Cola CreateCola();}class KFCFactory : FoodFactory{public Hamburg CreateHamburg(){return new KFChb();}public Cola CreateCola(){return new KFCcl();}}static void Main(string[] args){FoodFactory factory = new KFCFactory(); //KFCFactory();FoodFactory factory2 = new McDonaldsFactory();Hamburg hb = factory.CreateHamburg();Cola cl = factory2.CreateCola();Console.WriteLine("结果是:" + hb.produceHamburg());Console.WriteLine("结果是:" + cl.produceCola());Console.ReadKey();}[运行结果]:实验四建造者模式的应用1 实验目的1) 掌握建造者模式(Builder)的特点2) 分析具体问题,使用建造者模式进行设计。
2 实验内容和要求建造者模式是一种创建型模式,它主要是应对项目中一些复杂对象的创建工作。
所谓“复杂对象”,是指此对象中还含有其它的子对象。
我们现在定义一个场景:汽车生产必须包含车轮(Wheel)、油箱(OilBox)和车身(Body),应用建造者模式,用C#控制台应用程序实现该设计,构建BMW品牌和BenZ品牌汽车生产。
绘制该模式的UML图。
[代码截图]:class Car{private string wheel;private string oilBox;private string body;public string Wheel{ // OilBox、Body 类似,此处省略代码set { wheel = value; }get { return wheel; }}public void Introduce(){Console.WriteLine(Wheel);Console.WriteLine(OilBox);Console.WriteLine(Body);Console.WriteLine();}}abstract class CarBuilder{protected Car car = new Car();public abstract void BuildWheel();public abstract void BuildOilBox();public abstract void BuildBody();public Car GetResult(){ return car;}}class ConcreteBuilderBMW : CarBuilder //BenZ类似,省略{public override void BuildWheel(){car.Wheel = "Finish Wheel for BMWcar";}//BuildOilBox()、BuildBody()……}class Director //指挥者类{private CarBuilder builder;public Director(CarBuilder builder){this.builder = builder;}public void SetBuilder(CarBuilder builder){ this.builder = builder;}public void Construct(){builder.BuildWheel();builder.BuildOilBox();builder.BuildBody();}}static void Main(string[] args){Car car;CarBuilder cbd = new ConcreteBuilderBMW();Director dt = new Director(cbd);dt.Construct();car = cbd.GetResult();car.Introduce();cbd = new ConcreteBuilderBenZ();dt.SetBuilder(cbd);dt.Construct();car = cbd.GetResult();car.Introduce();Console.ReadKey();}[运行结果]:实验五适配器模式的应用1 实验目的1) 掌握适配器模式(Adapter)的特点2) 分析具体问题,使用适配器模式进行设计。