设计模式实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《设计模式》实验指导书
10学时
*师:**
实验一工厂模式的应用
【实验目的】
1) 掌握工厂模式(Factory)的特点
2) 分析具体问题,使用工厂模式进行设计。
【实验内容和要求】
有一个OEM制造商代理做HP笔记本电脑(Laptop),后来该制造商得到了更多的品牌笔记本电脑的订单Acer,Lenovo,Dell,该OEM商发现,如果一次同时做很多个牌子的本本,有些不利于管理。利用工厂模式改善设计,用C#控制台应用程序实现该OEM制造商的工厂模式。绘制该模式的UML图。
【模式UML图】
【模式代码(JA V A语言实现)】
public class FactoryMethod {
public static void main(String[] args) {
Computer c;
Factory f=new DellFactory();
c=f.getComputerType();
puterType();
f=new LenovoFactory();
puterType();
f=new AcerFactory();
c=f.getComputerType();
puterType();
}
}
interface Factory{
Computer getComputerType();
}
class DellFactory implements Factory{ @Override
public Computer getComputerType() {
return new Dell();
}
}
class AcerFactory implements Factory{ @Override
public Computer getComputerType() {
return new Acer();
}
}
class LenovoFactory implements Factory{ @Override
public Computer getComputerType() {
return new Lenovo();
}
}
/**
* 电脑品牌
*/
interface Computer{
public void ComputerType();
}
class Dell implements Computer{
@Override
public void ComputerType() {
// TODO Auto-generated method stub
System.out.println("Dell Computer");
}
}
class Acer implements Computer{
@Override
System.out.println("Acer Computer");
}
}
class Lenovo implements Computer{
@Override
public void ComputerType() {
// TODO Auto-generated method stub
System.out.println("Lenovo Computer");
}
}
【运行截图】
【实验小结】
通过本次实验,学会了使用工厂方法模式。工厂方法模式的适用性如下:当一个类不知道它所必须创建的对象的类时。
当一个类希望由它的子类来指定它所创建的对象时。
当类将创建对象的职责委托给多个帮助子类中的某一个,并且希望将哪一个帮助子类是代理这一信息局部化时。
实验二抽象工厂模式的应用
【实验目的】
1) 掌握抽象工厂模式(Abstract Factory)的特点
2) 分析具体问题,使用抽象工厂模式进行设计。
【实验内容和要求】
麦当劳(McDonalds)和肯德基(KFC)快餐店都经营汉堡(Hamburg)和可乐(Cola),用C#控制台应用程序实现这两个快餐店经营产品的抽象工厂模式。绘制该模式的UML图。
【模式UML图】
【模式代码】
public class AbstractFactoryTest {
public static void main(String[] args) {
Hamburg h;
Cola c;
AbstractFactory af=new MDNFactory();
h=af.createHamburg();
c=af.createCola();
h.getHumburg();
c.getCola();
af=new KDJFactory();
h=af.createHamburg();
c=af.createCola();
h.getHumburg();
c.getCola();
}
}
interface AbstractFactory{
Hamburg createHamburg();
Cola createCola();
}
class MDNFactory implements AbstractFactory { @Override
public Hamburg createHamburg() {
return new MDNHamburg();
}
@Override
public Cola createCola() {
return new MDNCola();
}
}
class KDJFactory implements AbstractFactory{ @Override
public Hamburg createHamburg() {
return new KDJHamburg();
}
@Override
public Cola createCola() {
return new KDJCola();
}
}
/**
* kDJ &MDN
*/
interface Hamburg{
void getHumburg();
}
class MDNHamburg implements Hamburg{