设计模式实验代码 您所在的位置:网站首页 控制台应用程序的特点 设计模式实验代码

设计模式实验代码

2024-04-06 02:37| 来源: 网络整理| 查看: 265

这里附带Word文档下载https://download.csdn.net/download/qq_36986067/11166539

目录

实验一 单例模式的应用

实验二 工厂模式的应用

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

实验四  建造者模式的应用

实验五 适配器模式的应用

实验六 桥接模式的应用

实验七 装饰模式的应用

实验八 外观模式的应用

实验九 观察者模式的应用

实验十 访问者模式的应用

实验一 单例模式的应用

1 实验目的

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

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

2 实验内容和要求

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

                 

通常客户端使用这个类是通过new一个AppConfig的实例来得到一个操作配置文件内容的对象。如果在系统运行中,有很多地方都需要使用配置文件的内容,系统中会同时存在多份配置文件的内容,这会严重浪费内存资源。

事实上,对于AppConfig类,在运行期间,只需要一个对象实例就够了。那么应该怎么实现呢?绘制该模式的UML图。

3 实验环境

 

Eclipse

语言:Java

 

4 UML图

5 实验主要代码

class AppConfig { private static AppConfig config; private String paramaterA;//参数 public String getParamaterA() { return paramaterA; } public void setParamaterA(String paramaterA) { this.paramaterA = paramaterA; } //私有化构造方法 private AppConfig() { } public static AppConfig GetInstanse() { if (config == null) { config = new AppConfig(); } return config; } } //测试类 public class Client { public static void main(String[] args) { AppConfig appConfig1 = AppConfig.GetInstanse(); appConfig1.setParamaterA("ParaA"); System.out.println("appconfig1 = " + appConfig1.getParamaterA()); } } 实验二 工厂模式的应用

1 实验目的

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

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

2 实验内容和要求

有一个OEM制造商代理做HP笔记本电脑(Laptop),后来该制造商得到了更多的品牌笔记本电脑的订单Acer,Lenovo,Dell,该OEM商发现,如果一次同时做很多个牌子的本本,有些不利于管理。利用工厂模式改善设计,实现该OEM制造商的工厂模式。绘制该模式的UML图。

3 实验环境

 

Eclipse

语言:Java

 

4 UML图

5 实验主要代码

public abstract class Laptop {// 一个抽象类 public abstract void Show(); } public class HP extends Laptop{ public void Show() { // TODO Auto-generated method stub System.out.println("HP笔记本"); } } public class Acer extends Laptop { @Override public void Show() { // TODO Auto-generated method stub System.out.println("Acer笔记本"); } } public class Lenovo extends Laptop { @Override public void Show() { // TODO Auto-generated method stub System.out.println("Lenovo笔记本"); } } //抽象工厂类 public abstract class AbFactory { public abstract Laptop CreateLp(); } public class HPFactory extends AbFactory { @Override public Laptop CreateLp() { return new HP(); } } public class LenovoFactory extends AbFactory { @Override public Laptop CreateLp() { // TODO Auto-generated method stub return new Lenovo(); } } public class AcerFactory extends AbFactory { @Override public Laptop CreateLp() { // TODO Auto-generated method stub return new Acer(); } } //测试类 public class Client { public static void main(String[] args) { // TODO Auto-generated method stub AbFactory fc1=new HPFactory(); AbFactory fc2=new AcerFactory(); AbFactory fc3=new LenovoFactory(); Laptop hp=fc1.CreateLp(); Laptop acer=fc2.CreateLp(); Laptop lenovo=fc3.CreateLp(); hp.Show(); acer.Show(); lenovo.Show(); } } 实验三 抽象工厂模式的应用

1 实验目的

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

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

2 实验内容和要求

麦当劳(McDonalds)和肯德基(KFC)快餐店都经营汉堡(Hamburg)和可乐(Cola),实现这两个快餐店经营产品的抽象工厂模式。绘制该模式的UML图。

3 实验环境

 

Eclipse

语言:Java

 

 

 

 

 

 

 

4 UML图

5 实验主要代码

public abstract class Hamburg {// 一个抽象汉堡包类 public abstract void Show(); } public class McHamburg extends Hamburg { @Override public void Show() { System.out.println("麦当劳的汉堡"); } } public class KFCHamburg extends Hamburg { @Override public void Show() { // TODO Auto-generated method stub System.out.println("肯德基的汉堡"); } } public abstract class Cola { public abstract void Show(); } public class McCola extends Cola { @Override public void Show() { // TODO Auto-generated method stub System.out.println("麦当劳的可乐"); } } public class KFCCola extends Cola { @Override public void Show() { // TODO Auto-generated method stub System.out.println("肯德基的可乐"); } } //抽象工厂类 public abstract class Factory { public abstract Hamburg CreateHambury(); public abstract Cola CreateCola(); } public class MHfactory extends Factory { @Override public Hamburg CreateHambury() { // TODO Auto-generated method stub return new McHamburg(); } @Override public Cola CreateCola() { // TODO Auto-generated method stub return new McCola(); } } public class KFCfactory extends Factory { @Override public Hamburg CreateHambury() { // TODO Auto-generated method stub return new KFCHamburg(); } @Override public Cola CreateCola() { // TODO Auto-generated method stub return new KFCCola(); } } //测试类 public class Client { public static void main(String[] args) { // TODO Auto-generated method stub Factory fc1=new MHfactory(); Hamburg h1=fc1.CreateHambury(); h1.Show(); Factory fc2=new KFCfactory(); Cola c1=fc2.CreateCola(); c1.Show(); } } 实验四  建造者模式的应用

1 实验目的

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

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

2 实验内容和要求

建造者模式是一种创建型模式,它主要是应对项目中一些复杂对象的创建工作。所谓“复杂对象”,是指此对象中还含有其它的子对象。我们现在定义一个场景:汽车生产必须包含车轮(Wheel)、油箱(OilBox)和车身(Body),应用建造者模式,实现该设计,构建BMW品牌和BenZ品牌汽车生产。绘制该模式的UML图。

3 实验环境

 

Eclipse

语言:Java

4 UML图

 

5 实验主要代码

//汽车类 public class Car { private String wheels; private String oilbox; private String body; public String getWheels() { return wheels; } public void setWheels(String wheels) { this.wheels = wheels; } public String getOilbox() { return oilbox; } public void setOilbox(String oilbox) { this.oilbox = oilbox; } public String getBody() { return body; } public void setBody(String body) { this.body = body; } public void show() { System.out.println(wheels); System.out.println(oilbox); System.out.println(body); } } public abstract class Builder { Car createCar = new Car(); public abstract void BuildWheels(); public abstract void BuildOilBox(); public abstract void BuildBody(); public Car GetCar() { return createCar; } } public class BenzBuilder extends Builder { @Override public void BuildWheels() { // TODO Auto-generated method stub createCar.setBody("benz的车身"); } @Override public void BuildOilBox() { // TODO Auto-generated method stub createCar.setOilbox("benz的邮箱"); } @Override public void BuildBody() { // TODO Auto-generated method stub createCar.setWheels("benz的轮子"); } } public class BMWBuilder extends Builder { @Override public void BuildWheels() { // TODO Auto-generated method stub createCar.setWheels("bmw的车轮"); } @Override public void BuildOilBox() { // TODO Auto-generated method stub createCar.setOilbox("bmw的油箱"); } @Override public void BuildBody() { // TODO Auto-generated method stub createCar.setBody("bmw的车身"); } } //指挥者 public class Director { private Builder builder; public Director(Builder builder) { this.builder = builder; } public void setBuilder(Builder builder) { this.builder = builder; } public void CreateCar() { builder.BuildBody(); builder.BuildOilBox(); builder.BuildWheels(); } } //客户端类 public class Client { public static void main(String[] args) { // TODO Auto-generated method stub Car car; Builder builder = new BenzBuilder(); Director dir = new Director(builder); dir.CreateCar(); car = builder.GetCar(); car.show(); } } 实验五 适配器模式的应用

1 实验目的

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

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

2 实验内容和要求

一个软件团队开发绘图系统,设计了圆对象(Circle)、矩形对象(Rectangle),线对象(Line)都支持Draw()函数,即可以通过Draw()函数绘制图形。为了加快项目进度,将角度对象(Angle)绘制功能交给了合作团队实现。但合作团队将角度对象绘制函数定为了DrawAngle()。绘图系统提供给用户后,用户不满意,希望能统一的调用,不用记太多命令。应用适配器模式,用控制台应用程序完善该设计。绘制该模式的UML图。

3 实验环境

 

Eclipse

语言:Java

4 UML图

5 实验主要代码

//定义图形接口 public interface Shape { // 统一行为,可以画圆、矩形等 public void draw(); } //下面分别是画圆、矩形、线条类 public class Circle implements Shape { @Override public void draw() { System.out.println("画一个圆"); } } public class Rectangle implements Shape{ @Override public void draw() { System.out.println("画一个矩形"); } } public class Line implements Shape { @Override public void draw() { System.out.println("画一条线"); } } //这是外包做的角度类 public class Angle { public void drawAngle() { System.out.println("画一个角度"); } } public class AngleAdapter extends Angle implements Shape { public void draw() { super.drawAngle(); } } //客户端测试类 public class Client { public static void main(String[] args) { Shape c = new Circle(); Shape r = new Rectangle(); Shape l = new Line(); Shape a = new AngleAdapter(); c.draw(); r.draw(); l.draw(); a.draw(); // 适配器将接口统一了 } } 实验六 桥接模式的应用

1 实验目的

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

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

2 实验内容和要求

一个咖啡店可以提供大杯(JorumCoffee)、中杯(MediumCoffee)、小杯(SmallCoffee)的咖啡(Coffee),为了满足不同用户的口味,在咖啡中可以添加牛奶(Milk),或者糖(Sugar),或者柠檬(Lemon),提供给用户不同口味的组合,如大杯咖啡加牛奶,中杯咖啡加糖,小杯咖啡加柠檬,小杯咖啡加糖等。应用桥接模式,用控制台应用程序实现该设计。绘制该模式的UML图。

3 实验环境

 

Eclipse

语言:Java

4 UML图

5 实验主要代码

//口味 public interface Additives { public void add(); } public class Milk implements Additives { @Override public void add() { System.out.print("加了牛奶"); } } public class Sugar implements Additives { @Override public void add() { System.out.print("加了糖"); } } public class Lemon implements Additives { @Override public void add() { System.out.print("加了柠檬"); } } //咖啡接口 public interface Coffee { public void add(Additives additives); public void drink(); } public class SmallCoffee implements Coffee { private Additives additives; @Override public void add(Additives additives) { this.additives=additives; } @Override public void drink() { additives.add(); System.out.println("的小咖啡"); } } public class MediumCoffee implements Coffee { private Additives additives; @Override public void add(Additives additives) { this.additives=additives; } @Override public void drink() { additives.add(); System.out.println("的中咖啡"); } } public class BigCoffee implements Coffee { private Additives additives; @Override public void add(Additives additives) { this.additives=additives; } @Override public void drink() { additives.add(); System.out.println("的大咖啡"); } } //测试类 public class Client { public static void main(String[] args) { Coffee coffee = new SmallCoffee(); Additives sugar=new Sugar(); coffee.add(sugar); coffee.drink(); } } 实验七 装饰模式的应用

1 实验目的

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

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

2 实验内容和要求

DQ是著名的冰激凌专卖店,口味非常丰富,每种产品可以添加多种配料,如  (1)奥利奥OreoCookies

(2)杏仁Almond  

(3)腰果Cashews 

(4)核桃pecan

(5)葡萄干raisin

(6)巧克力ChocolateChip

(7)果酱Strawberry等,

每添加一种配料需要2元钱,需要设计一个系统来计算价格。应用装饰模式,用控制台应用程序实现该设计。绘制该模式的UML图。

3 实验环境

Eclipse

语言:Java

4 UML图

5 实验主要代码

public abstract class Component { public abstract void BaseIce(); public abstract int Money(); }//组件 public class IceCream extends Component { @Override public void BaseIce() { System.out.println(" 冰激凌"); } @Override public int Money() { return 10; } } //抽象装饰类 public class Decorator extends Component { protected Component component; public void Decorate(Component component) { this.component = component; } @Override public void BaseIce() { if (component != null) { component.BaseIce(); } } @Override public int Money() { // TODO Auto-generated method stub return component.Money(); } } //具体装饰类 public class OreoCookies extends Decorator { @Override public void BaseIce() { super.BaseIce(); System.out.println(" 奥利奥"); } @Override public int Money() { // TODO Auto-generated method stub return super.Money()+2; } } public class Almond extends Decorator { @Override public void BaseIce() { super.BaseIce(); System.out.println(" 杏仁"); } @Override public int Money() { // TODO Auto-generated method stub return super.Money()+2; } } public class Cashews extends Decorator { @Override public void BaseIce() { super.BaseIce(); System.out.println(" 腰果"); } @Override public int Money() { // TODO Auto-generated method stub return super.Money()+2; } } public class Pecan extends Decorator { @Override public void BaseIce() { super.BaseIce(); System.out.println(" 核桃"); } @Override public int Money() { // TODO Auto-generated method stub return super.Money()+2; } } public class Raisin extends Decorator { public void BaseIce() { super.BaseIce(); System.out.println(" 葡萄干"); } @Override public int Money() { // TODO Auto-generated method stub return super.Money()+2; } } public class ChocolateChip extends Decorator { public void BaseIce() { super.BaseIce(); System.out.println(" 巧克力"); } @Override public int Money() { // TODO Auto-generated method stub return super.Money()+2; } } public class Strawberry extends Decorator { public void BaseIce() { super.BaseIce(); System.out.println(" 果酱"); } @Override public int Money() { // TODO Auto-generated method stub return super.Money()+2; } } //客户端测试类 public class Client { public static void main(String[] args) { IceCream icecream = new IceCream(); OreoCookies O = new OreoCookies(); Almond A = new Almond(); Cashews C = new Cashews(); Pecan P = new Pecan(); Raisin R = new Raisin(); ChocolateChip Ch = new ChocolateChip(); Strawberry S = new Strawberry(); System.out.println("冰激凌价格:"+icecream.Money()+"元"); System.out.println("购买的冰淇淋组合:"); O.Decorate(icecream); A.Decorate(O); C.Decorate(A); P.Decorate(C); Ch.Decorate(P); Ch.BaseIce(); System.out.println("商品价格:" + Ch.Money() + "元"); } } 实验八 外观模式的应用

1 实验目的

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

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

2 实验内容和要求

一个保安系统的,由录像机、电灯、红外线监控和警报器组成。保安系统的操作人员需要经常将这些仪器启动和关闭。保安类需要用到所有的录像机(Camera)、电灯(Light)、感应器(Sensor)和警报器(Alarm)对象,保安觉得使用不方便。应用外观模式,用控制台应用程序改进该设计。绘制该模式的UML图。

3 实验环境

 

Eclipse

语言:Java

4 UML图

5 实验主要代码

//定义一个设备接口 public interface Equipment { public void turnOn(); // 打开设备 public void turnOff(); // 关闭设备 } public class Camera implements Equipment { public void turnOn() { System.out.println("打开录像机"); } public void turnOff() { System.out.println("关闭录像机"); } } public class Light implements Equipment { public void turnOn() { System.out.println("打开电灯"); } public void turnOff() { System.out.println("关闭电灯"); } } public class Sensor implements Equipment { @Override public void turnOn() { System.out.println("打开传感器"); } @Override public void turnOff() { System.out.println("关闭传感器"); } } public class Alarm implements Equipment { @Override public void turnOn() { System.out.println("打开警报器"); } @Override public void turnOff() { System.out.println("关闭警报器"); } } public class Console { private Equipment camera = new Camera(); private Equipment light = new Light(); private Equipment sensor = new Sensor(); private Equipment alarm = new Alarm(); public void turnOnAll() { camera.turnOn(); light.turnOn(); sensor.turnOn(); alarm.turnOn(); } public void turnOffAll() { camera.turnOff(); light.turnOff(); sensor.turnOff(); alarm.turnOff(); } } public class Cline { public static void main(String[] args) { Console console = new Console(); console.turnOnAll(); console.turnOffAll(); } } 实验九 观察者模式的应用

1 实验目的

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

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

2 实验内容和要求

网上商店中如果商品(product)在名称(name)、价格(price)等方面有变化,系统能自动通知会员,将是网上商店区别传统商店的一大特色。如何设计实现? 说明你所选择的设计模式,画出类关系图并指明各个类的角色。绘制该模式的UML图。

3 实验环境

 

Eclipse

语言:Java

4 UML图

5 实验主要代码

public abstract class Observer { public abstract void update(); } public class Subject { private ArrayList observers = new ArrayList(); public void increase(Observer observer){ observers.add(observer); } public void delete(Observer observer){ observers.remove(observer); } public void notifyVIP(){ for(int i=0; i


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有