文章目录

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

一、实验三 工厂模式的应用

1.实验目的

  1. 掌握工厂模式(Factory)的特点
  2. 分析具体问题,使用工厂模式进行设计。

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;}@Overridepublic 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接口@Overridepublic 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.实验目的

  1. 掌握抽象工厂模式(Abstract Factory)的特点
  2. 分析具体问题,使用抽象工厂模式进行设计。

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;}@Overridepublic 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)该模式中包含的角色及其职责

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

(4)实现要点

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

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

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

软件设计模式与体系结构实验——2.1-1(2)(抽象)工厂模式的应用相关推荐

  1. 软件设计模式与体系结构实验——3.1-1组合模式的应用

    链接: 软件设计模式与体系结构实验--2.1-1(2)(抽象)工厂模式的应用 链接: 软件设计模式与体系结构实验--2.2-1生成器模式的应用 链接: 软件设计模式与体系结构实验--2.3-1单列模式 ...

  2. 软件设计模式与体系结构实验汇总

    实验一 工厂模式的应用 有一个OEM制造商代理做HP笔记本电脑(Laptop),后来该制造商得到了更多的品牌笔记本电脑的订单Acer,Lenovo,Dell,该OEM商发现,如果一次同时做很多个牌子的 ...

  3. 每天学习一个设计模式(八):创建型之抽象工厂模式

    目录 一.基本概念 二.通俗解释 三.应用场景 1.使用简单工厂模式的解决方案 2.抽象工厂模式 抽象工厂模式结构 在什么情况下应当使用抽象工厂模式 抽象工厂模式的起源 四.抽象工厂模式的优缺点 抽象 ...

  4. python:水果与设计模式-抽象工厂模式

    抽象工厂模式(Abstract Factory Pattern):属于创建型模式,它提供了一种创建对象的最佳方式.在抽象工厂模式中,接口是负责创建一个相关对象的工厂,不需要显式指定它们的类,每个生成的 ...

  5. 软件设计模式与体系结构 课后练习1

    软件设计模式与体系结构 课后练习1 习题如下: 解:第一题 画出该模式的设计类图: 如图1所示: 图1 设计类图 2.  解释为什么自己的设计符合开闭原则? 答:因为设计的类.模块和函数对扩展开放,对 ...

  6. 软件设计模式与体系结构(上)

    目录 软件设计模式概述(面向对象设计概述) 一.面向对象设计的表示方法 1. UML 二.面向对象的设计原则 1.单一原则 2.开闭原则 3.里氏代换原则 4.依赖倒转原则 5.接口隔离原则 6.合成 ...

  7. 软件设计模式之路-----工厂模式抽象工厂模式

    系统开发和现实生活是一样的.在现实生活中一个复杂的商品都是通过一个工厂产生,具体工厂怎么产生的我们不需在乎.在软件设计上也可如此,如果一个对象的创建过程比较复杂,便可考虑使用工厂模式. 简单工厂模式 ...

  8. Java设计模式之 抽象工厂模式实验报告书

    目录 Java设计模式之 1 抽象工厂模式实验报告书 1 实验四:抽象工厂模式 2 一.实验目的 2 二.实验内容 2 三.实验步骤 2 3.1抽象工厂模式:电器工厂 2 3.2 car 6 3.3 ...

  9. 021 设计模式之工厂方法模式,抽象工厂模式的区别

    简单工厂模式,工厂方法模式和抽象工厂模式的异同 简单工厂模式,工厂方法模式和抽象工厂模式都是属于创建型设计模式,这三种创建型模式都不需要知道具体类.我们掌握一种思想,就是在创建一个对象时,需要把容易发 ...

最新文章

  1. OpenCV库使用sift函数,出现“The function/feature is not implemented”问题解决方法
  2. java死锁的产生与解决
  3. python gettext_python gettext使用
  4. 微软IT规划方法论解读
  5. 扎克伯格不要「脸」了?Facebook正式更名为“Meta”
  6. 深入理解jvm运行时区域
  7. require(): open_basedir restriction in effect. 解决方法
  8. MongoDB中文问题
  9. 如何从Windows中访问Linux硬盘,干货:如何从 Windows 系统访问 Linux 文件
  10. 在微信源代码共享仿乐趣, 把你的业务微信
  11. Allegro封装制作
  12. QQ表情发送失败的原因
  13. oracle中的dbf是什么文件,ORACLE数据库 DBF数据恢复-dbf是什么文件
  14. SMAA算法详解 - SMAAEdgeDetectionVS
  15. 建站分享:调整WordPress自带标签云参数
  16. C程序设计-清览题库
  17. 龙族幻想服务器正在维护中,【龙族幻想】3月18日维护公告
  18. [考试反思]0909csp-s模拟测试41:反典
  19. 消防工程师与消防员有什么区别?
  20. flume的source测试赫赫有名

热门文章

  1. 【前端】PS图层切图
  2. 国内外AI绘画『文生图』大模型效果对比
  3. Work20230406
  4. Matlab机械臂综合仿真平台,包含运动学、动力学和控制。 MATLAB机器人仿真正逆运动学simulink轨迹规划 机械臂动力学控制等
  5. 区块链隐私保护文献 An Efficient NIZK Scheme for Privacy-Preserving Transactions over Account-Model Blockchain
  6. 东风日产全新劲客首次搭载BOSE PERSONAL PLUS音响;艾比森举办秋季发布会推出多个新品 | 全球TMT...
  7. 根据心电信号计算心率的matlab代码
  8. 修改电脑配置的方法(被骗之后才学会的)
  9. 能够修改证件照的软件有哪些?分享两种好用的修改工具
  10. 海康摄像头浏览器访问不了