软件设计模式与体系结构实验

您所在的位置:网站首页 汽车设计模式 软件设计模式与体系结构实验

软件设计模式与体系结构实验

2024-05-24 20:32| 来源: 网络整理| 查看: 265

文章目录 一、实验三 工厂模式的应用1.实验目的2.实验内容3.模式UML图4.模式代码5.运行截图6.实验小结 二、实验四 抽象工厂模式的应用1.实验目的2.实验内容3.模式UML图4.模式代码5.运行截图6.实验小结

一、实验三 工厂模式的应用 1.实验目的 掌握工厂模式(Factory)的特点分析具体问题,使用工厂模式进行设计。 2.实验内容

【作业2.1-1】例2.3为使用工厂方法模式设计的汽车保险管理应用程序实例,现在需要扩张例2.3的设计图,添加一个名为LuxuryCarInsurance的类,并且需要编写此类和其他需要添加的类的代码,详细要求参见光盘的响应作业部分。

3.模式UML图

在这里插入图片描述 本题目设计程序的设计类图,及其他图: 在这里插入图片描述

4.模式代码

添加LuxuryCarInsurance类:

//创建LuxeryCarInsurance类,实现AutoInsurance接口 public class LuxuryCarInsurance implements AutoInsurance { private String description; public String getlnsuranceDescription() { description = "LuxuryCarlnsurance:' ninLuxuryCarlnsurance coverage pays for medical bills" + "lost wages, rehabilitation, treatment and/or" + "funeral costs for anyone injured or killed " + "by your car. Such coverage will also pay for" + "pain and suffering damages when a third " + "party successfully sues."; return description; } @Override public String getInfo() { description = "LuxuryCarlnsurance: \n\nLuxuryCarlnsurance coverage pays for medical bills" + "lost wages, rehabilitation, treatment and/or" + "funeral costs for anyone injured or killed " + "by your car. Such coverage will also pay for" + "pain and suffering damages when a third " + "party successfully sues."; return description; } }

添加LuxuryCarPolicyProducer类:

public class LuxuryCarPolicyProducer implements PolicyProducer{ // public AutoInsurance getPolicyObj(){ // return new LuxuryCarlnsurance(); // }//创建LuxeryPolicy 工厂类,实现 PolicyProducer接口 @Override public AutoInsurance getInsurObj() { return (AutoInsurance) new LuxuryCarInsurance(); } }

添加Client类:

//(添加汽车保险名) public static final String COMPREHENSIVE = "Comprehensive Coverage"; public static final String LUXURYCAR="LuxuryCar Insurance"; //(下拉框添加LuxeryCarInsurance保险选项) cmbInsuranceType.addItem(COMPREHENSIVE); cmbInsuranceType.addItem(LUXURYCAR); //(添加触发事件判断) else if(type.equals ( LUXURYCAR) ) { pp= new LuxuryCarPolicyProducer() ; } 5.运行截图

在这里插入图片描述 在这里插入图片描述 在这里插入图片描述

6.实验小结

通过本次实验,学会了使用工厂方法模式。工厂方法模式的适用性如下: 在以下情况下,适用于工厂方法模式: 1.当一个类不知道它所必须创建的对象的类的时候。 2.当一个类希望由它的子类来指定它所创建的对象的时候。 3.当类将创建对象的职责委托给多个帮助子类中的某一个,并且你希望将哪一个帮助子类是代理者这一信息局部化的时候。

二、实验四 抽象工厂模式的应用 1.实验目的 掌握抽象工厂模式(Abstract Factory)的特点分析具体问题,使用抽象工厂模式进行设计。 2.实验内容

【作业2.1-2】在例2.4中设计并且实现了豪华( Super)和中等(Medum)别墅(House)和公寓(Condo)的查询。要求在该设计的基础上,增加一个新的类SemiDetacher(半独立式楼宇),并且编写代码实现相应的查询功能。

3.模式UML图

在这里插入图片描述 本题目设计程序的设计类图,及其他图: 在这里插入图片描述

4.模式代码

添加SemiDetacher类:

public interface SemiDetacher { public String getSemiDetacherInfo(); public String getSemiDetacherFeatures(); }

添加SuperSemiDetacher类:

public class SuperSemiDetacher implements SemiDetacher { private String name; public SuperSemiDetacher(String cName) { name = cName; } public String getSemiDetacherInfo() { return "superSemiDetacher.html"; } public String getSemiDetacherFeatures() { return "Super SemiDetacher "; } }

添加MediumSemiDetacher类:

public class MediumSemiDetacher implements SemiDetacher { private String name; public MediumSemiDetacher(String cName) { name = cName; } @Override public String getSemiDetacherInfo() { return "MediumSemiDetacher.html"; } public String getSemiDetacherFeatures() { return "Medium SemiDetacher "; } }

添加 BuildingFactory:

public abstract SemiDetacher getSemiDetacher();

添加MediumBuildingFactory:

@Override public SemiDetacher getSemiDetacher() { return new MediumSemiDetacher("Medium SemiDetacher"); }

添加SuperBuildingFactory:

@Override public SemiDetacher getSemiDetacher() { return new SuperSemiDetacher("Super SemiDetacher"); }

添加GUI:

public static final String SEMIDETACHER= "SemiDetacher"; if(type.equals(AbstractFactoryGUI.SEMIDETACHER)){ SemiDetacher cd = bf.getSemiDetacher(); String fileNm =cd.getSemiDetacherInfo(); putHouseInfoToScreen(fileNm); } 5.运行截图

在这里插入图片描述 在这里插入图片描述 在这里插入图片描述

6.实验小结

工厂方法模式 (1)基本简介 从设计模式的类型上来说,简单工厂模式是属于创建型模式,又叫做静态工厂方法(StaticFactory Method)模式,但不属于23种GOF设计模式之一。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。简单工厂模式是工厂模式家族中最简单实用的模式,可以理解为是不同工厂模式的一个特殊实现。 简单工厂模式的实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类(这些产品类继承自一个父类或接口)的实例。 工厂方法模式的对简单工厂模式进行了抽象。有一个抽象的Factory类(可以是抽象类和接口),这个类将不在负责具体的产品生产,而是只制定一些规范,具体的生产工作由其子类去完成。在这个模式中,工厂类和产品类往往可以依次对应。即一个抽象工厂对应一个抽象产品,一个具体工厂对应一个具体产品,这个具体的工厂就负责生产对应的产品。 (2)意图: 提供一个类,由它负责根据一定的条件创建某一具体类的实例。 (3)该模式中包含的角色及其职责

抽象工厂(Creator)角色 是工厂方法模式的核心,与应用程序无关。任何在模式中创建的对象的工厂类必须实现这个接口。具体工厂(Concrete Product)角色 实现抽象工厂接口的具体工厂类,包含与应用程序密切相关的逻辑,并且受到应用程序调用以创建产品对象。抽象产品(Product)角色 简单工厂模式所创建的所有对象的父类,它负责描述所有实例所共有的公共接口。具体产品(Concrete Product)角色 简单工厂模式的创建目标,所有创建的对象都是充当这个角色的某个具体类的实例。 一般来讲它是抽象产品类的子类,实现了抽象产品类中定义的所有接口方法。

(4)实现要点

1. Factory Method模式的两种情况:一是Creator类是一个抽象类且它不提供它所声明的工厂方法的实现;二是Creator是一个具体的类且它提供一个工厂方法的缺省实现。 2. 工厂方法是可以带参数的。 3. 工厂的作用并不仅仅只是创建一个对象,它还可以做对象的初始化,参数的设置等。 (5)总结 Factory Method模式是设计模式中应用最为广泛的模式,通过本文,相信读者已经对它有了一定的认识。然而我们要明确的是:在面向对象的编程中,对象的创建工作非常简单,对象的创建时机却很重要。Factory Method要解决的就是对象的创建时机问题,它提供了一种扩展的策略,很好地符合了开放封闭原则。 (6)问题

在简单工厂方法模式、工厂方法模式与抽象工厂模式中,哪个模式符合开闭原则?为什么?哪个模式一般不符合开闭原则?或者说明在哪种情况下,开闭原则成立,哪种情况下,开闭原则不成立。

答:简单工厂模式一般不符合开闭原则。在简单工厂模式中,如果要增加一个新产品类,相应地在工厂类中也要增加一个条件语句,用于创建新的产品类的对象。也就是说,必须修改工厂类的源代码。 工厂方法模式和抽象工厂模式符合开闭原则。因为在工厂方法模式和抽象工厂模式中,无需修改或者重新编译已经存在的代码,就可以添加新的产品类。 开闭模式是指对扩展开放,对修改关闭,说的更通俗点,就是说开发了一个软件,应该可以对它进行功能扩展(开放),而在进行这些扩展的时候,不需要对原来的程序进行修改(关闭)。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3