设计模式实验五(工厂模式)

合集下载

实验五 工厂方法模式、抽象工厂模式和生成器模式

实验五 工厂方法模式、抽象工厂模式和生成器模式

实验五工厂方法模式、抽象工厂模式和生成器模式的应用一、实验目的通过该实验,理解工厂方法模式、抽象工厂模式和生成器模式的意图、结构,在软件开发中使用这些模式并进行功能验证。

二、实验内容1.手机工厂:现实中不同品牌的手机应由不同的工厂制造,使用工厂方法模式模拟实现。

图1 手机工厂的类图2.微型计算机配件的生产:该系统所需要的产品族有两个:PC系列和MAC系列,产品等级结构也有两个:RAM和CPU,使用抽象工厂模式模拟实现。

图2 微型计算机配件生产系统的设计类图3.用程序画一个小人:要求小人要有头、身体、手和脚。

使用生成器模式模拟实现。

图3 利用程序画小人的类图三、实验步骤与要求1.对于以上题目要认真分析和理解题意,程序中要求使用相应的模式。

2.上机录入,使用JDK编译器调试、运行、验证程序。

3.请指导教师审查程序和运行结果并评定成绩;4.撰写并上交实验报告。

四、实验原理:1、工厂方法模式当系统准备为用户提供某个类的子类的实例,又不想让用户代码和该子类形成耦合时,可以使用工厂方法模式来设计系统。

工厂方法模式的关键是在一个接口或抽象类中定义一个抽象方法,该方法返回某个类的子类的实例,该抽象类或接口让其子类或实现该接口的类通过重写这个抽象方法返回某个子类的实例。

适合使用工厂方法模式的情景有:●用户需要一个类的子类的实例,但不希望与该类的子类形成耦合●用户需要一个类的子类的实例,但用户不知道该类有哪些子类可用。

工厂方法模式的UML类图:图4 工厂方法模式的类图2、抽象工厂模式当系统准备为用户提供一系列相关的对象,又不想让用户代码和创建这些对象的类形成耦合时,就可以使用抽象工厂模式来设计系统。

抽象工厂模式的关键是在一个抽象类或接口中定义若干个抽象方法,这些抽象方法分别返回某个类的实例,该抽象类或接口让其子类或实现该接口的类重写这些抽象方法为用户提供一系列相关的对象。

适合使用抽象工厂模式的情景有:●系统需要为用户提供多个对象,但不希望用户直接使用new运算符实例化这些对象,即希望用户和创建对象的类解耦。

设计模式实验4 抽象工厂模式.doc

设计模式实验4 抽象工厂模式.doc

实验报告课程:设计模式实验学期:2010-2011学年第一学期任课教师:专业:学号:姓名:成绩:实验4 抽象工厂模式1.题目:使用抽象工厂模式实现一个DIY电脑店,其中的电脑配置有三个种类:学生版、家庭装、豪华版。

2.模式设计的UML类图:3.程序源代码:(1)计算机配置工厂接口ComputerConfigurationFactory.java:public interface ComputerConfigurationFactory{public Cpu createCpu();public Ram createRam();public Mainboard createMainboard();public Harddisk createHarddisk();public Display createDisplay();}(2)计算机配置工厂接口的各个子类:public class StudentComputerConfigurationFactory implements ComputerConfigurationFactory{public Cpu createCpu(){ return new StudentCpu(); }public Ram createRam(){ return new StudentRam(); }public Mainboard createMainboard(){ return new StudentMainboard(); }public Harddisk createHarddisk(){ return new StudentHarddisk(); }public Display createDisplay(){ return new StudentDisplay(); }}public class HomeComputerConfigurationFactory implements ComputerConfigurationFactory{public Cpu createCpu(){ return new HomeCpu(); }public Ram createRam(){ return new HomeRam(); }public Mainboard createMainboard(){ return new HomeMainboard(); }public Harddisk createHarddisk(){ return new HomeHarddisk(); }public Display createDisplay(){ return new HomeDisplay(); }}public class DeluxeComputerConfigurationFactory implements ComputerConfigurationFactory{public Cpu createCpu(){ return new DeluxeCpu(); }public Ram createRam(){ return new DeluxeRam(); }public Mainboard createMainboard(){ return new DeluxeMainboard(); }public Harddisk createHarddisk(){ return new DeluxeHarddisk(); }public Display createDisplay(){ return new DeluxeDisplay(); }}(3)电脑各种配置的接口:public interface Cpu{public String toString();}public interface Ram{public String toString();}public interface Mainboard{public String toString();}public interface Harddisk{public String toString();}public interface Display{public String toString();}(4)电脑配置Cpu接口的各个子类:public class StudentCpu implements Cpu {public String toString(){ return"Intel 奔腾双核 E5400(盒)"; } }public class HomeCpu implements Cpu{public String toString(){ return"Intel 酷睿i5 650(盒)"; } }public class DeluxeCpu implements Cpu{public String toString(){ return"Intel 酷睿i7 980X(至尊版)"; }}(5)电脑配置Ram接口的各个子类:public class StudentRam implements Ram{public String toString(){ return"宇瞻2GB DDR3 1333(经典系列)"; }}public class HomeRam implements Ram{public String toString(){ return"金士顿4GB DDR3 1333(骇客神条套装)"; } }public class DeluxeRam implements Ram{public String toString(){ return"海盗船TW3X4G2000C9DF"; }}(6)电脑配置Mainboard接口的各个子类:public class StudentMainboard implements Mainboard {public String toString(){ return"铭瑄 MS-M3A890G"; }}public class HomeMainboard implements Mainboard {public String toString(){ return"技嘉GA-870A-UD3"; }}public class DeluxeMainboard implements Mainboard {public String toString(){ return"华硕Rampage III Extreme"; }}(7)电脑配置Harddisk接口的各个子类:public class StudentHarddisk implements Harddisk {public String toString(){ return"希捷250GB 7200.12 8M"; }}public class HomeHarddisk implements Harddisk{public String toString(){ return"三星500GB 7200转 16M(串/金宝)"; }}public class DeluxeHarddisk implements Harddisk {public String toString(){ return"希捷Cheetah 15K.7 600GB"; }}(8)电脑配置Display接口的各个子类:public class StudentDisplay implements Display {public String toString(){ return"飞利浦193E1SB"; }}public class HomeDisplay implements Display{public String toString(){ return"三星P2450H"; }}public class DeluxeDisplay implements Display {public String toString(){ return"戴尔UltraSharp 2408WFP"; }}(9)抽象产品计算机类Computer.java:public abstract class Computer{String name;Cpu cpu;Ram ram;Mainboard mainboard;Harddisk harddisk;Display display;public abstract void prepare();public void setName(String name){ =name; }public String getName(){ return name; }public String getCpu(){ return cpu.toString(); }public String getRam(){ return ram.toString(); }public String getMainboard(){ return mainboard.toString(); }public String getHarddisk(){ return harddisk.toString(); }public String getDisplay(){ return display.toString(); }}(10)抽象产品计算机类的子类PrepareComputer.java:public class PrepareComputer extends Computer{ComputerConfigurationFactory ConfigurationFactory;public PrepareComputer(ComputerConfigurationFactoryConfigurationFactory) {this.ConfigurationFactory = ConfigurationFactory;}public void prepare(){cpu = ConfigurationFactory.createCpu();ram = ConfigurationFactory.createRam();mainboard = ConfigurationFactory.createMainboard();harddisk = ConfigurationFactory.createHarddisk();display = ConfigurationFactory.createDisplay();}}(11)抽象计算机店类ComputerStore.java:public abstract class ComputerStore{protected abstract Computer createrComputer(String item);public Computer orderComputer(String type){Computer computer = createrComputer(type);;computer.prepare();return computer;}}(12)抽象计算机店类的子类DIYComputerStore.java:public class DIYComputerStore extends ComputerStore{protected Computer createrComputer(String item){Computer computer = null;ComputerConfigurationFactory studentConfigurationFactory =new StudentComputerConfigurationFactory();ComputerConfigurationFactory homeConfigurationFactory =new HomeComputerConfigurationFactory();ComputerConfigurationFactory deluxeConfigurationFactory =new DeluxeComputerConfigurationFactory();if(item.equals("学生版")){computer = newPrepareComputer(studentConfigurationFactory);computer.setName("学生版");}else if(item.equals("家庭装")){computer = new PrepareComputer(homeConfigurationFactory);computer.setName("家庭装");}else if(item.equals("豪华版")){computer = newPrepareComputer(deluxeConfigurationFactory);computer.setName("豪华版");}return computer;}}(13)实现用户界面的主类DIYStore.java:(由于代码过长,只列出主要部分)public class DIYStore extends javax.swing.JFrame {public DIYStore() {super("XXXXX");initComponents();}private void initComponents(){ jPanel1.setBorder(javax.swing.BorderFactory.createTitledBorder("种类"));buttonGroup1.add(jRadioButton1);jRadioButton1.setText("学生版");buttonGroup1.add(jRadioButton2);jRadioButton2.setText("家庭装");buttonGroup1.add(jRadioButton3);jRadioButton3.setText("豪华版");jPanel2.setBorder(javax.swing.BorderFactory.createTitledBorder("配置"));jLabel1.setText("CPU:");jLabel2.setText("内存:");jLabel3.setText("主板:");jLabel4.setText("硬盘:");jLabel5.setText("显示器:");jTextField1.setText("");jTextField2.setText("");jTextField3.setText("");jTextField4.setText(""); jTextField5.setText("");jButton1.setText("退出");jButton2.setText("清空");jButton3.setText("确定");}private void jButton1ActionPerformed(java.awt.event.ActionEvent evt){ System.exit(0);}private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) { buttonGroup1.clearSelection();jTextField1.setText("");jTextField2.setText("");jTextField3.setText("");jTextField4.setText("");jTextField5.setText("");}private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) {String[] configuration = getConfiguration();jTextField1.setText(configuration[0]);jTextField2.setText(configuration[1]);jTextField3.setText(configuration[2]);jTextField4.setText(configuration[3]);jTextField5.setText(configuration[4]);}public String[] getConfiguration(){ComputerStore DIYstore = new DIYComputerStore();Computer computer = null;String[] configuration = new String[5];if(jRadioButton1.isSelected())computer = DIYstore.orderComputer("学生版");else if(jRadioButton2.isSelected())computer = DIYstore.orderComputer("家庭装");else if(jRadioButton3.isSelected())computer = DIYstore.orderComputer("豪华版");configuration[0] = computer.getCpu();configuration[1] = computer.getRam();configuration[2] = computer.getMainboard();configuration[3] = computer.getHarddisk();configuration[4] = computer.getDisplay();return configuration;}public static void main(String args[]) {java.awt.EventQueue.invokeLater(new Runnable() { public void run() {new DIYStore().setVisible(true);}});}}。

设计模式实验报告总结(3篇)

设计模式实验报告总结(3篇)

第1篇一、实验背景随着软件工程的不断发展,设计模式作为一种解决软件开发中常见问题的有效方法,越来越受到广泛关注。

本次实验旨在通过学习设计模式,提高编程能力,掌握解决实际问题的方法,并加深对设计模式的理解。

二、实验目的1. 理解设计模式的基本概念和分类;2. 掌握常见设计模式的原理和应用;3. 提高编程能力,学会运用设计模式解决实际问题;4. 培养团队协作精神,提高项目开发效率。

三、实验内容本次实验主要涉及以下设计模式:1. 创建型模式:单例模式、工厂模式、抽象工厂模式、建造者模式;2. 结构型模式:适配器模式、装饰者模式、桥接模式、组合模式、外观模式;3. 行为型模式:策略模式、模板方法模式、观察者模式、责任链模式、命令模式。

四、实验过程1. 阅读相关资料,了解设计模式的基本概念和分类;2. 分析每种设计模式的原理和应用场景;3. 编写代码实现常见设计模式,并进行分析比较;4. 将设计模式应用于实际项目中,解决实际问题;5. 总结实验经验,撰写实验报告。

五、实验结果与分析1. 创建型模式(1)单例模式:通过控制对象的实例化,确保一个类只有一个实例,并提供一个访问它的全局访问点。

实验中,我们实现了单例模式,成功避免了资源浪费和同步问题。

(2)工厂模式:定义一个用于创建对象的接口,让子类决定实例化哪一个类。

实验中,我们使用工厂模式创建不同类型的交通工具,提高了代码的可扩展性和可维护性。

(3)抽象工厂模式:提供一个接口,用于创建相关或依赖对象的家族,而不需要指定具体类。

实验中,我们使用抽象工厂模式创建不同类型的计算机,实现了代码的复用和扩展。

(4)建造者模式:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

实验中,我们使用建造者模式构建不同配置的房屋,提高了代码的可读性和可维护性。

2. 结构型模式(1)适配器模式:将一个类的接口转换成客户期望的另一个接口,使原本接口不兼容的类可以一起工作。

设计模式课程设计5种

设计模式课程设计5种

设计模式课程设计5种一、教学目标本课程的教学目标是使学生掌握设计模式的基本概念、原理和五种常见的设计模式,并能够运用这些模式解决实际问题。

具体目标如下:知识目标:学生能够理解设计模式的基本概念、原理和五种常见的设计模式(包括单例模式、工厂模式、观察者模式、策略模式和装饰器模式);了解设计模式在软件开发中的应用和重要性。

技能目标:学生能够运用五种常见的设计模式解决实际问题,能够分析并选择合适的设计模式进行软件设计。

情感态度价值观目标:学生能够认识到设计模式在软件工程中的重要性,培养软件设计和编程的规范性和系统性,提高软件质量和可维护性。

二、教学内容本课程的教学内容主要包括设计模式的基本概念、原理和五种常见的设计模式。

具体安排如下:第1-2课时:设计模式的基本概念和原理,包括什么是设计模式,设计模式的作用和分类。

第3-4课时:单例模式,包括单例模式的定义、实现方式和应用场景。

第5-6课时:工厂模式,包括工厂模式的定义、实现方式和应用场景。

第7-8课时:观察者模式,包括观察者模式的定义、实现方式和应用场景。

第9-10课时:策略模式,包括策略模式的定义、实现方式和应用场景。

第11-12课时:装饰器模式,包括装饰器模式的定义、实现方式和应用场景。

三、教学方法本课程采用多种教学方法,以激发学生的学习兴趣和主动性。

具体方法如下:1.讲授法:教师讲解设计模式的基本概念、原理和五种常见的设计模式。

2.案例分析法:教师通过分析实际案例,引导学生理解和运用设计模式。

3.讨论法:学生分组讨论设计模式的实现方式和应用场景,分享心得体会。

4.实验法:学生动手编写代码,实践五种常见的设计模式。

四、教学资源本课程所需的教学资源包括教材、参考书、多媒体资料和实验设备。

具体资源如下:1.教材:《设计模式:可复用面向对象软件的基础》。

2.参考书:《大话设计模式》、《深入理解设计模式》。

3.多媒体资料:PPT课件、设计模式相关视频教程。

eprime

eprime

E E--Prime 实验设计种按心理实验程序的结构和核心实验过程设计的复杂性,可把心理实验程序归属以下五种模式进行设计: 一是单一模式(Baisic),二是并联模式(Paralleling),三串联模式(Series),四是平衡模式(CounterBalance),五是相嵌模式(Nesting)。

各种模式的结构图如图7.1所示。

图7.1-1为单一模式实验设计,图7.1-2为并联模式实验设计,图7.1-3为串联模式实验设计,图7.1-4为平衡模式实验设计,图7.1-5为相嵌模式实验设计。

图7.7.1 E 1 E 1 E--Prime 实验设计的五种模式实验设计的五种模式这里所说的心理实验程序的结构和核心实验过程设计的复杂性,是基于实验中包含的存储实验材料及相关控制的List 的结构关系和核心实验过程CEP (Core Experimental Procedure)的多少而言。

并将实验中包含的List 的结构关系将心理学的实验程序划分为上述五种模式进行设计。

并且这里所说的“复杂性”,纯针对正式实验模块而言,不包括练习模块。

下面我们重点讲述各种模式的实验设计。

第一节第一节 单一模式与并联模式单一模式与并联模式单一模式与并联模式一、 单一模式单一模式1.模型结构模型结构单一模式是最为简单的心理实验设计模式,如上图7.2所示。

单一模式由一个存储实验材料及相关控制的List 和一个核心实验过程CEP 组成。

从图7.1中可以看出,其余四种模式中都包含了单一模式的模型。

7.1-1 7.1-2 7.1-3 7.1-4 7.1-5 图例:I -指导语,E -结语界面, 表格List 为实验材料及相关控制,CEP 为核心实验过程,空白框为各界面2.典型实验典型实验如词汇判断的实验、典型的Stroop 效应实验,启动效应实验都是典型的单一模式的实验设计。

3.实验设计实验设计我们在第三章讲E-Prime 的实验设计时,所举得“词汇判断”实验就是单一模式的实验设计,具体的设计过程这里就不再熬述,而且,单一模式的实验设计也是难度最低的实验设计。

湖南师大教科院《发展心理学》课程.第二章发展心理学研究的方法

湖南师大教科院《发展心理学》课程.第二章发展心理学研究的方法

(2)时间系列单组多轮测设计:O1 X O2 C O3 X O4
3.儿童心理发展实验的特点 (1)实验室的实验情景必须接近儿童生活环境,充分考虑儿童的身 心特点,并且与教育原则相适应; (2)现场实验(现实生活环境中进行实验)具有明显的优势—生态 效度高; (3)发展性实验(揭示心理发展过程及其规律)与干预性实验(检验 心理发展的训练效果)并重。 问题三:选择一份发展心理学研究报告,阅读其研究方法与过 程部分,着重讨论:
19.85±3.53 22.48±2.89 24.06±4.12 17.36±3.90 26.64±3.08 24.27±4.06 13.810*** 7.938***
(1)依据思维发展参数确定变量;
(2)以年龄为独立变量;
(3)采用小样本
参考答案(一)
一、问题与假设:概念发展是思维发展的组成部分。根据儿童思维发展研究, 儿童概念发展水平的主要参数是概括水平及其变化,据此推断儿童在掌握概 念过程中概括水平高意味着概念水平高。因此,以年龄为独立变量,假设: 随着儿童年龄增加,概括水平逐步提高。 二、方法与过程:
(2)选择观察策略:参与式与旁观式/实录式与抽样式(时间抽样与 事件抽样)
(3)制定观察记录表:封闭式与开放式
3. 时间抽样观察法 时间抽样指观察在规定时间内(时间样本)发生的所有行为。 时间是行为样本的抽取依据。因此,观察过程中时间控制以及 在单位时间内发生行为的分类系统是时间抽样法的关键。其应 用程序: (1)时间单位分解:根据观察人数和行为特点确定时间单位的 长短及其循环周期。假如同时观察5个幼儿,每个幼儿的行为 观察(记录)1分钟,那么,时间单位为5分钟。如果一次活 动持续20分钟,那么可以分解为4个时间单位,每个幼儿观 察4次,获得4个行为样本。 (2)行为分类系统:根据一定的标准对行为进行分类,并且对 每类行为下操作定义(标明每种行为的外部特征及其表现)。 一般情况下,采用符号作为行为的标记,以便于记录。 (3)记录表格的设计:时间抽样法一般采用封闭式表格记录。 表格的设计按照时间单位与行为类别来制定线条表称:

深入浅出设计模式(中文版)

深入浅出设计模式(中文版)

3) ቤተ መጻሕፍቲ ባይዱ)
抽象产品角色:它是具体产品继承的父类或者是实现的接口。在 java 中一般有抽象类 或者接口来实现。 具体产品角色:具体工厂角色所创建的对象就是此角色的实例。在 java 中由具体的类 来实现。 用类图来清晰的表示下的它们之间的关系:
工厂方法模式使用继承自抽象工厂角色的多个子类来代替简单工厂模式中的“上帝类”。 正如上面所说,这样便分担了对象承受的压力;而且这样使得结构变得灵活起来——当有新 的产品(即暴发户的汽车)产生时,只要按照抽象产品角色、抽象工厂角色提供的合同来生 成,那么就可以被客户使用,而不必去修改任何已有的代码。可以看出工厂角色的结构也是 符合开闭原则的! 我们还是老规矩,使用一个完整的例子来看看工厂模式各个角色之间是如何来协调的。 话说暴发户生意越做越大,自己的爱车也越来越多。这可苦了那位司机师傅了,什么车它都 要记得,维护,都要经过他来使用!于是暴发户同情他说:看你跟我这么多年的份上,以后 你不用这么辛苦了,我给你分配几个人手,你只管管好他们就行了!于是,工厂方法模式的 管理出现了。代码如下: //抽象产品角色,具体产品角色与简单工厂模式类似,只是变得复杂了些,这里略。 //抽象工厂角色 public interface Driver{ public Car driverCar(); } public class BenzDriver implements Driver{ public Car driverCar(){ return new Benz(); } } public class BmwDriver implements Driver{ public Car driverCar() { return new Bmw(); } } //应该和具体产品形成对应关系... //有请暴发户先生 public class Magnate

软件工程实验指导书 2021

软件工程实验指导书 2021

软件工程实验指导书 2021一、实验目的软件工程是一门将理论与实践紧密结合的学科。

通过本实验课程,旨在帮助学生深入理解和掌握软件工程的基本原理、方法和技术,培养学生的软件开发能力、团队协作能力和问题解决能力,为今后从事软件开发及相关工作打下坚实的基础。

二、实验环境1、操作系统:Windows 10 或 Linux(如 Ubuntu)。

2、开发工具:Eclipse、IntelliJ IDEA 等集成开发环境(IDE)。

3、数据库管理系统:MySQL、Oracle 等。

4、版本控制系统:Git。

三、实验要求1、学生应在实验前认真预习实验内容,熟悉相关的理论知识和技术。

2、实验过程中,学生应严格遵守实验室的规章制度,爱护实验设备。

3、学生应独立完成实验任务,不得抄袭他人的实验成果。

4、实验结束后,学生应及时整理实验数据和结果,撰写实验报告。

四、实验内容实验一:软件需求分析1、实验目的掌握软件需求分析的方法和过程。

学会使用需求分析工具,如 UML 用例图、活动图等。

2、实验内容确定软件项目的目标和范围。

对用户的需求进行调研和分析,收集相关的信息和资料。

绘制用例图和活动图,描述系统的功能和业务流程。

编写需求规格说明书。

3、实验步骤第一步:明确软件项目的背景和目标,与相关人员进行沟通和交流,了解项目的需求和期望。

第二步:通过问卷调查、用户访谈等方式收集用户的需求,对需求进行整理和分类。

第三步:使用 UML 工具绘制用例图和活动图,对系统的功能和业务流程进行建模。

第四步:根据需求分析的结果,编写需求规格说明书,详细描述系统的功能、性能、数据、安全等方面的需求。

实验二:软件设计1、实验目的掌握软件设计的原则和方法。

学会使用设计模式,提高软件的可维护性和可扩展性。

2、实验内容进行软件体系结构设计,选择合适的架构模式。

设计软件的模块结构和接口。

运用设计模式对软件进行优化。

3、实验步骤第一步:根据需求规格说明书,确定软件的体系结构,如分层架构、微服务架构等。

软件设计与体系结构实验指导书

软件设计与体系结构实验指导书

实验1:ACME软件体系结构描述语言应用一、实验目的1)掌握软件体系结构描述的概念2)掌握应用ACMESTUDIO工具描述软件体系结构的基本操作二、实验学时2学时。

三、实验环境计算机及ACMESTUDIO。

四、实验内容利用ACME语言定义软件体系结构风格,修改ACME代码,并进行风格测试。

五、实验操作步骤一、导入Zip文档建立的一个Acme Project,并且命名为AcmeLab2。

如下图:接着导入ZIP文档,导入完ZIP文档后显示的如下图:二、修改风格在AcmeLab2项目中,打开families下的TieredFam.acme.如下图:修改组件外观1. 在组件类型中,双击DataNodeT; 在其右边的编辑器中,将产生预览;选择Modify按钮,将打开外观编辑器对话框。

2. 首先改变图形:找到Basic shape section,在Stock image dropdown menu中选择Repository类型.3. 在Color/Line Properties section修改填充颜色为深蓝色。

4. 在颜色对话框中选择深蓝色,并单击 [OK].5. 修改图形的边框颜色为绿色7. 单击Label tab,在Font Settings section, 设置字体颜色为白色,单击[OK]产生的图形如下图:添加新元素类型1. 在Component Types section选择New按钮2. 在对话框中,类型名称输入LogicNodeT .3. 选择TierNodeT 为父类型.4. 单击 [Finish].5. 按照修改外观的步骤,修改LogicNodeT的外观:填充颜色为浅绿色,边框颜色为黑色,大小为2,其他默认。

产生的图形如下图:添加新属性类型1. 选择Property Types2. 选择New按钮3. 在对话框中,类型名称为TierPropT4. 类型选择enum5. 值为:client, logic, data6. 单击[OK].添加属性1. 激活属性视图页2. 双击TierNodeT3. 选择Properties tab4. 右击空白位置,或者单击图标,选择新建属性5. 属性名为tier.6. 类型为TierPropT(找不到,则直接输入TieredFam.TierPropT)7.单击 [OK].添加规则1. 单击Family editor中的TieredFam (Press to select).2. 选择属性视图中的规则页3. 单击生成新规则4. 规则名为hostCheck,选择invariant单选项5. 在规则框中输入(直接粘贴过去)Forall t1 : TierNodeT in ponents |!t1.allowShareHost -> (Forall t2 : TierNodeT in ponents | t1 != t2 -> t1.host != t2.host)6. 单击 [Parse Rule] 以确认无语法错误,有错误,要重新写。

面向对象设计原则实验报告实验07

面向对象设计原则实验报告实验07

设计模式实验报告一、实验目的1. 学会选择合适的设计模式解决在软件开发中遇到的实际问题,加深对常用设计模式的理解和掌握。

2.掌握一些常用的设计模式联用技巧,学会同时运用多种设计模式解决实际问题。

二、实验要求1.根据实例场景正确选择设计模式,理解常用设计模式的动机和意图。

2.结合实例,绘制对应的模式结构图。

三、实验内容1.练习 1在某 FPS (First - Person Shooting ,第一人称射击)游戏中提供了多个不同的游戏场景。

在每一个游戏场景中,提供了对应的地图(Map)、天气(Weather)和游戏背景音乐(Sound)等。

请选择一种合适的设计模式对游戏场景进行设计,使得当用户选择游戏场景时,该场景所对应的地图、天气和背景音乐能够同时出现;此外,还可以方便地在该游戏中增加新的游戏场景。

要求给出该设计模式的名称并结合实例绘制对应的结构图(即类图,类名、方法名和属性名可自行定义)。

2.练习 2在某 FPS 游戏中,系统可以给所有游戏成员发送通知,例如提示任务执行完毕、发送新的任务提醒、发出敌人袭击警报等。

请选择一种合适的设计模式设计该系统通知模块,使得在系统中可以灵活地增加或删除游戏成员。

要求给出该设计模式的名称并结合实例绘制对应的结构图(即类图,类名、方法名和属性名可自行定义)。

3.练习 3某 FPS 游戏中提供了一个游戏管理器(GameManager),通过该管理器用户可以对音效(Sound Effect)、场景(Scene)、游戏角色(Role)等对象进行参数设置。

为了节约系统资源开且保证对象状态的一致性,在游戏运行时,用户只能打开唯一的一个管理器界面。

根据以上描述,请选择两种合适的设计模式设计该游戏管理器,在实现对多个对象进行统一设置的同时保证游戏管理器的唯一性。

要求给出这两种设计模式的名称并结合实例绘制对应的结构图(即类图,类名、方法么和属性名可自行定义)。

4.练习 4为了让游戏场景呈现更加通真的效果,在某 FPS 游戏中可以对场景(Scene)的光照效果等进行渲染(Rendering)。

设计模式实验报告-工厂模式

设计模式实验报告-工厂模式

实验二:工厂模式实验内容简单工厂方法模式:利用简单工厂方法模式创建pad, phone, watch的对象,并使用这些对象娱乐。

工厂模式:利用工厂模式创建pad, phone, watch的对象,并使用这些对象娱乐。

抽象工厂模式:利用抽象工厂模式创建华为、小米、苹果的pad, phone, watch的对象,并使用这些对象娱乐。

简单工厂方法模式设计图1简单工厂模式类图核心代码ConsumerElectronics.java核心代码Pad.java核心代码Watch.java核心代码Phone.java核心代码ConsumerElectronicsFactory.java核心代码实现效果图 2 简单工厂模式实现效果图工厂模式设计图 3 工厂模式类图核心代码ConsumerElectronicsFactory.java核心代码PadFactory.java核心代码WatchFactory.java核心代码PhoneFactory.java核心代码实现效果图4 工厂模式实现效果图抽象工厂模式设计图5抽象工厂模式类图核心代码AbstractFactory.java核心代码AppleFactory.java核心代码HuaweiFactory.java核心代码MiFactory.java核心代码实现效果图 6 抽象工厂模式实现效果图实验体会做完这次试验,下面是我的一些体会:首先,工厂模式是为了解耦:把对象的创建和使用的过程分开。

其次,工厂模式可以降低代码重复。

如果创建对象的过程都很复杂,需要一定的代码量,而且很多地方都要用到,那么就会有很多的重复代码。

我们可以这些创建对象的代码放到工厂里统一管理。

既减少了重复代码,也方便以后对该对象的创建过程的修改维护。

由于创建过程都由工厂统一管理,所以发生业务逻辑变化,不需要逐个修正,只需要在工厂里修改即可,降低维护成本。

另外,因为工厂管理了对象的创建逻辑,使用者并不需要知道具体的创建过程,只管使用即可,减少了使用者因为创建逻辑导致的错误。

郑州大学设计模式小作业

郑州大学设计模式小作业

一、抽象工厂模式1.1 题目:计算机包含内存(RAM)、CPU等硬件设备,根据下面的“产品等级结构-产品族”示意图,使用抽象工厂模式实现计算机设备创建过程并绘制相应的类图。

1.2类图:1.3程序代码://定义接口CPUpublic interface CPU {void create();}//定义接口RAMpublic interface RAM {void create();}//定义类PcCPUpublic class PcCPU implements CPU{ public void create() {System.out.println(" win cpu");}}//定义类PcRAMpublic class PcRAM implements RAM { public void create() {System.out.println("win RAM");}}//定义类MacCPUpublic class MacCPU implements CPU{ public void create() {System.out.println("mac CPU");}}//定义类MacRAMpublic class MacRAM implements RAM{ public void create() {System.out.println("mac RAM");}}//定义接口ComputerFactoryinterface ComputerFactory {CPU produceCPU();RAM produceRAM();}//定义类ComputerPartsClientpublic class ComputerPartsClient {public static void main(String args[]) {ComputerFactory factory;CPU cpu;RAM ram;factory = new PcFactory();cpu = factory.produceCPU();cpu.create();ram = factory.produceRAM();ram.create();ComputerFactory factory1;factory1 = new MacFactory();cpu = factory1.produceCPU();cpu.create();ram = factory1.produceRAM();ram.create();}}//定义类PcFactorypublic class PcFactory implements ComputerFactory { public PcCPU produceCPU() {System.out.println("请使用PC产品族的CPU");return new PcCPU();}public PcRAM produceRAM() {System.out.println("请使用PC产品族的RAM");return new PcRAM();}}//定义类MacFactorypublic class MacFactory implements ComputerFactory{ public MacCPU produceCPU() {System.out.println("请使用Mac产品族的CPU");return new MacCPU();}public MacRAM produceRAM() {System.out.println("请使用Mac产品族的RAM");return new MacRAM();}}1.4运行结果:二、桥接模式2.1题目:如果系统中某对象有三个维度,如某日志记录器既可以支持不同的操作系统(Windows、Linux、Unix),还可以支持多种编程语言(C#、C++、Java),并且可以使用不同的输出方式(File、Console、XML)。

实验设计模式及举例

实验设计模式及举例

实验设计模式及举例一、实验设计模式概述实验设计是科学研究中的重要环节,它决定了研究的有效性和可靠性。

实验设计模式是指在进行实验设计时所采用的一种标准化的、规范化的方法。

根据实验变量的不同,可以将实验设计模式分为三种:组间设计、组内设计和混合设计。

每种设计模式都有其特点和应用场景,选择合适的实验设计模式对于实验结果的准确性和可靠性至关重要。

二、组间设计1.定义:组间设计是指将参与者随机分配到不同的实验组,每个组接受不同的实验处理,以比较不同处理之间的差异。

2.优点:组间设计可以减少个体差异对实验结果的影响,因为每个参与者只接受一种处理方式。

此外,由于每个参与者只接受一种处理方式,因此不存在顺序效应或疲劳效应等问题。

3.缺点:组间设计需要更多的参与者,因为每个参与者只能接受一种处理方式。

此外,如果实验组之间的个体差异较大,可能会导致实验结果的不准确。

4.举例:在一个研究不同运动方式对心肺功能的影响的实验中,可以将参与者随机分为两组,一组进行有氧运动,另一组进行力量训练。

通过比较两组之间的心肺功能指标,可以评估不同运动方式对心肺功能的影响。

三、组内设计1.定义:组内设计是指将参与者按照某种顺序接受不同的实验处理,以比较不同处理之间的差异。

2.优点:组内设计可以减少参与者数量,因为每个参与者可以接受多种处理方式。

此外,由于参与者可以接受多种处理方式,因此可以更好地探究自变量之间的交互作用。

3.缺点:组内设计容易受到顺序效应和疲劳效应的影响。

如果实验处理之间的顺序不同,可能会导致实验结果的不准确。

此外,如果参与者感到疲劳,可能会影响实验结果的可靠性。

4.举例:在一个研究不同食物对血糖水平的影响的实验中,可以让同一个参与者在一天之内分别食用高糖食物和低糖食物,然后比较两种食物对血糖水平的影响。

由于所有参与者都是在同一时间内进行实验的,因此可以控制时间因素对血糖水平的影响。

四、混合设计1.定义:混合设计是指将组间设计和组内设计结合使用的一种实验设计方法。

《设计模式》实验指导书

《设计模式》实验指导书

《设计模式》实验指导书软件学院前言随着面向对象技术的发展和广泛的应用,设计模式已成为面向对象开发人员的必备技能之一。

无论是面向对象的初学者还是具有一定开发经验的程序员,都可以通过对设计模式的学习和应用加深对面向对象思想的理解,开发出具有更好的可扩展性和复用性的软件。

本实验指导书通过项目实例让学生加深对设计模式的理解,在学习设计模式的同时掌握如何在实际软件开发中运用模式,强化对设计模式的理解和掌握。

实验一:创建型模式设计一、实验目的1、以本实验指导中给定的实验模式为实验实例,掌握五类“创建型模式”的工作原理和应用环境。

2、掌握工厂方法模式(Factory Method)、抽象工厂模式(Abstract Factory)、建造者模式(Builder)、原型模式(Prototype)、单例模式(Singleton)等五类“创建型模式”的实验过程。

二、实验原理1、创建型模式的工作原理创建型模式隐藏了类的实例的创建细节,通过隐藏对象如何被创建和组合在一起达到使整个系统独立的目的。

创建型模式分为:工厂方法模式(Factory Method)、抽象工厂模式(Abstract Factory)、建造者模式(Builder)、原型模式(Prototype)、单例模式(Singleton)等五类。

2、Factory Method模式的工作原理工厂方法模式(Factory Method Pattern):也叫虚拟构造器(Virtual Constructor)模式或者多态工厂(Polymorphic Factory)模式,在工厂方法模式中,工厂父类负责定义创建产品对象的公共接口,而工厂子类则负责生成具体的产品对象,这样做的目的是将产品类的实例化操作延迟到工厂子类中完成。

它的UML类图如下:工厂方法模式包含如下角色:✓Product:抽象产品✓ConcreteProduct:具体产品✓Creator:抽象工厂✓Concrete Creator:具体工厂Factory Method 模式的特点为当系统扩展需要添加新的产品对象时,仅仅需要添加一个具体产品对象以及一个具体工厂对象,原有工厂对象不需要进行任何修改,也不需要修改客户端,很好地符合了“开闭原则”。

设计模式(1)——简单工厂模式和策略模式的结合应用

设计模式(1)——简单工厂模式和策略模式的结合应用

设计模式(1)——简单⼯⼚模式和策略模式的结合应⽤⼀、前⾔ 设计,为蓝图,为构建之根本。

个⼈对于设计模式的理解:设计模式是软件开发过程中⼀些常⽤pattern的概括总结。

这些思想终究是别⼈实践过程中存在着背景因素的产物,可以⽤,但不可滥⽤。

最近在学习软件设计模式⽅⾯的知识,在这⾥实现每个使⽤场景记录⼀下⾃⼰的学习过程。

⼆、功能 简单⼯⼚模式:是属于⼯⼚模式的⼀种,它使⽤⼀个集中了所有实例(产品)的创建逻辑的⼯⼚类去实例化对象。

外界只需要告诉⼯⼚所需⽣产产品的类型,⽽⽆需关注⽣产的过程。

将“类实例化的操作”与“使⽤对象的操作”分开,让使⽤者不⽤知道具体参数就可以实例化出所需要的“产品”类,从⽽避免了在客户端代码中显式指定,降低类之间的耦合。

策略模式:策略模式是⼀种定义⼀系列算法的⽅法,从概念上来看,所有这些算法完成的都是相同的⼯作,只是实现不同,它可以以相同的⽅式调⽤所有的算法,减少了各种算法类与使⽤算法类之间的耦合,其实就是⽤来封装变化。

GOF⾥关于策略模式的功能描述——“策略模式的Strategy类层次为Context定义了⼀系列的可供重⽤的算法或⾏为。

继承有助于析取出这些算法中的公共功能” “当不同的⾏为堆砌在同⼀个类中时,就很难避免使⽤条件语句来选择合适的⾏为。

将这些⾏为封装在⼀个个独⽴的Strategy类中,可以在使⽤这些⾏为的类中消除条件语句”。

三、实例 以计算⼆维坐标空间两点间的不同类型距离(欧⽒距离、曼哈顿距离和棋盘格距离)为例。

在基类定义⼀个抽象接⼝Calculate,在派⽣类中实现它。

1// 距离计算基类2class DistanceBase3 {4public:5virtual ~DistanceBase() = default;6public:7virtual double Calculate(cv::Point2d point1_, cv::Point2d point2_) = 0;8 };910// 欧⼏⾥得距离计算类11class EuclideanDistance : public DistanceBase12 {13public:14double Calculate(cv::Point2d point1_, cv::Point2d point2_)15 {16double result = 0.0;17 result = pow((point1_.x - point2_.x), 2) + pow((point1_.y - point2_.y), 2);18 result = sqrt(result);1920return result;21 }22 };2324// 曼哈顿距离计算类25class ManhattanDistance : public DistanceBase26 {27public:28double Calculate(cv::Point2d point1_, cv::Point2d point2_)29 {30double result = 0.0;31 result = abs(point1_.x - point2_.x) + abs(point1_.y - point2_.y);3233return result;34 }35 };3637// 棋盘格距离计算类38class ChessboardDistance : public DistanceBase39 {40public:41double Calculate(cv::Point2d point1_, cv::Point2d point2_)42 {43double result = 0.0;44 result = std::max(abs(point1_.x - point2_.x), abs(point1_.y - point2_.y));4546return result;47 }48 }; ⼯⼚类的实现1enum DistanceType2 {3 EUCLIDEAN = 0,4 MANHATTAN = 1,5 CHESSBOARD = 2,6 };789class DistanceFactory10 {11public:12static DistanceBase* creatCalculator(DistanceType type)13 {14 DistanceBase* p = NULL;15switch (type)16 {17case DistanceType::EUCLIDEAN:18 p = new EuclideanDistance();19break;20case DistanceType::MANHATTAN:21 p = new ManhattanDistance();22break;23case DistanceType::CHESSBOARD:24 p = new ChessboardDistance();25break;26default:27break;28 }2930return p;31 }32 }; Client端代码,根据输⼊的DistanceType来控制⼯⼚类具体实例化哪个距离计算对象DistanceBase* calculator = DistanceFactory::creatCalculator(DistanceType::EUCLIDEAN);double result = calculator->Calculate(cv::Point2d(1, 1), cv::Point2d(4, 5)); 简单⼯⼚模式的缺点除了违背了开放封闭原则以外,通过以上的Client端代码可以发现,Client需要认识DistanceBase基类和DistanceFactory⼯⼚类两个类,可不可以让其只认识⼀个类? 这个时候可以结合策略模式来实现all in one的⽬的,使计算算法彻底地与客户端分离。

设计模式上机实验一实验报告

设计模式上机实验一实验报告

设计模式实验一实验报告书专业班级软件 0703 学号 3901070324 姓名吉亚云指导老师刘伟时间 2010年3月 27日中南大学软件学院实验一设计模式上机实验一一、实验目的熟练使用PowerDesigner绘制类图,构造系统的静态结构模型;使用PowerDesigner和任意一种面向对象编程语言实现几种常见的设计模式,包括简单工厂模式、工厂方法模式、抽象工厂模式、原型模式、单例模式、适配器模式、桥接模式和组合模式。

二、实验要求1. 使用PowerDesigner绘制标准的UML类图;2. 正确无误绘制简单工厂模式、工厂方法模式、抽象工厂模式、原型模式、单例模式、适配器模式、桥接模式和组合模式的模式结构图;3. 使用任意一种面向对象编程语言实现简单工厂模式、工厂方法模式、抽象工厂模式、原型模式、单例模式、适配器模式、桥接模式和组合模式,代码运行正确无误。

三、实验步骤1. 熟悉PowerDesigner11的常用功能;2. 使用PowerDesigner绘制类图;3. 使用PowerDesigner绘制简单工厂模式结构图并用面向对象编程语言实现该模式;4. 使用PowerDesigner绘制工厂方法模式结构图并用面向对象编程语言实现该模式;5. 使用PowerDesigner绘制抽象工厂模式结构图并用面向对象编程语言实现该模式;6. 使用PowerDesigner绘制原型模式结构图并用面向对象编程语言实现该模式;7. 使用PowerDesigner绘制单例模式结构图并用面向对象编程语言实现该模式;8. 使用PowerDesigner绘制适配器模式结构图并用面向对象编程语言实现该模式;9. 使用PowerDesigner绘制桥接模式结构图并用面向对象编程语言实现该模式;10. 使用PowerDesigner绘制组合模式结构图并用面向对象编程语言实现该模式。

四、实验报告要求1. 绘制实例场景的类图;2. 提供简单工厂模式结构图及实现代码;3. 提供工厂方法模式结构图及实现代码;4. 提供抽象工厂模式结构图及实现代码;5. 提供原型模式结构图及实现代码;6. 提供单例模式结构图及实现代码;7. 提供适配器模式结构图及实现代码;8. 提供桥接模式结构图及实现代码;9. 提供组合模式结构图及实现代码。

中南大学刘伟《设计模式》实验参考答案

中南大学刘伟《设计模式》实验参考答案

3. 现需要设计一个程序来读取多种不同类型的图片格式,针对每一种图片格式都设计 一个图片读取器(ImageReader),如 GIF 图片读取器(GifReader)用于读取 GIF 格式的图片、JPG 图片读取器(JpgReader)用于读取 JPG 格式的图片。图片读取器对象通过图片读取器工厂 ImageReaderFactory 来创建,ImageReaderFactory 是一个抽象类,用于定义创建图片读取器
4
return array[random()]; } //随机生成一个整数作为数组下标 public static int random() {
Date d = new Date(); Random random = new Random(); int value = Math.abs(random.nextInt()); value = value % 4; return value; } public static void main(String args[]) { Multiton m1,m2,m3,m4; m1 = Multiton.getInstance(); m2 = Multiton.getInstance(); m3 = Multiton.getInstance(); m4 = Multiton.getInstance();
2
的工厂方法,其子类 GifReaderFactory 和 JpgReaderFactory 用于创建具体的图片读取器对象。 试使用工厂方法模式设计该程序,绘制类图并编程模拟实现。需充分考虑系统的灵活性和可
扩展性。
参考答案:
ImageReaderFactory
ImageReader
+ createImageReader () : ImageReader

编程深入实验报告总结

编程深入实验报告总结

一、实验背景随着信息技术的飞速发展,编程已经成为现代社会不可或缺的技能。

为了提高自己的编程能力,我参加了本次编程深入实验。

通过本次实验,我对编程有了更深入的理解,掌握了一些高级编程技巧,并提升了代码质量。

二、实验目的1. 深入理解编程语言的基本原理和特性;2. 掌握高级编程技巧,提高代码质量和执行效率;3. 培养良好的编程习惯,提高编程能力。

三、实验内容1. 编程语言特性分析本次实验涉及多种编程语言,如Python、Java、C++等。

通过对这些编程语言的基本原理和特性的分析,我深刻理解了不同编程语言的优势和适用场景。

2. 高级编程技巧在实验过程中,我学习了以下高级编程技巧:(1)面向对象编程(OOP):通过学习OOP,我掌握了类和对象的概念,学会了如何定义类、创建对象、封装、继承和多态等编程思想。

(2)设计模式:了解了常用的设计模式,如单例模式、工厂模式、观察者模式等,学会了如何在实际项目中应用这些设计模式。

(3)代码优化:通过学习代码优化技巧,如使用合适的数据结构、算法优化、避免重复代码等,提高了代码质量和执行效率。

(4)版本控制:学习了Git版本控制工具,掌握了代码的提交、分支、合并等操作,提高了团队协作效率。

3. 编程实践在实验过程中,我完成了以下编程实践项目:(1)Python爬虫:使用Python实现了针对某个网站的爬虫程序,实现了数据抓取、解析和存储等功能。

(2)Java Web项目:使用Java、Spring框架和MyBatis等技术,实现了一个小型在线商城项目,包括商品管理、订单管理、用户管理等模块。

(3)C++游戏开发:使用C++和OpenGL技术,开发了一个简单的2D游戏,实现了游戏画面渲染、角色控制、碰撞检测等功能。

四、实验总结1. 提升了编程能力:通过本次实验,我对编程有了更深入的理解,掌握了多种编程语言和高级编程技巧,提高了自己的编程能力。

2. 培养了良好的编程习惯:在实验过程中,我学会了如何阅读代码、编写规范代码、进行代码优化等,培养了良好的编程习惯。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

云南大学软件学院实验报告课程:设计模式试验学期:2010-2011学年第一学期任课教师:陆歌皓专业:软件工程学号:20081120 姓名:成绩:实验4 抽象工厂模式一、实验题目:使用抽象工厂模式实现一个DIY电脑店,其中的电脑配置有三个种类:学生装、家庭装、豪华版。

二、模式设计UML类图:三、实现代码:Computer类public abstract class Computer {String name;CPU cpu;Memory memory;Motherboard motherboard;Monitor monitor;Harddrive harddrive;abstract void prepare();void setName(String name){=name;}String getName(){return name;}public String toString() {StringBuffer result = new StringBuffer();result.append(name + " ----\n");if (cpu != null) {result.append(cpu);result.append("\n");}if (memory != null) {result.append(memory);result.append("\n");}if (motherboard != null) {result.append(motherboard);result.append("\n");}if (monitor != null) {result.append(monitor);result.append("\n");}if (harddrive != null) {result.append(harddrive);result.append("\n");}return result.toString();}}ComputerComponentFactory类public interface ComputerComponentFactory {public CPU createCPU();public Memory createMemory();public Motherboard createMotherboard();public Monitor createMonitor();public Harddrive createHarddrive();}ComputerStor类public abstract class ComputerStore {protected abstract Computer createComputer(String item);public Computer orderComputer(String type) {Computer computer = createComputer(type);/*System.out.println("--- 制造一台 " + computer.getName() + " ---");*/ computer.prepare();return computer;}}CPU类public interface CPU {public String toString();}DeluxeCPU类public class DeluxeCPU implements CPU{public String toString(){return"CPU : Intel Core i7-9x5 Extreme(Bloomfield)";}}DeluxeComputerComponentFactory类public class DeluxeComputerComponentFactory implements ComputerComponentFactory{public CPU createCPU() {return new DeluxeCPU();}public Memory createMemory() {return new DeluxeMemory();}public Motherboard createMotherboard() {return new DeluxeMotherboard();}public Monitor createMonitor() {return new DeluxeMonitor();}public Harddrive createHarddrive() {return new DeluxeHarddrive();}}DeluxeComputerStore类public class DeluxeComputerStore extends ComputerStore{protected Computer createComputer(String item) {Computer computer = null;ComputerComponentFactory ingredientFactory =new DeluxeComputerComponentFactory();if (item.equals("deluxe")) {computer = new DeluxeEdition(ingredientFactory);computer.setName(" 豪华版电脑! ");}return computer;}}ComputerTestDrive类public class ComputerTestDrive extends javax.swing.JFrame {private static final long serialVersionUID = 7554011515032409145L;public ComputerTestDrive() {s uper("我是嘟嘟!!!");initComponents();}private void initComponents() {buttonGroup1 = new javax.swing.ButtonGroup();jPanel1 = new javax.swing.JPanel();jPanel2 = new javax.swing.JPanel();jRadioButton1 = new javax.swing.JRadioButton();jRadioButton2 = new javax.swing.JRadioButton();jRadioButton3 = new javax.swing.JRadioButton();jPanel3 = new javax.swing.JPanel();jLabel1 = new javax.swing.JLabel();jButton1 = new javax.swing.JButton();jButton2 = new javax.swing.JButton();jButton3 = new javax.swing.JButton();jScrollPane1 = new javax.swing.JScrollPane();jTextArea1 = new javax.swing.JTextArea();setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);---------------------------略-----------------------------jLabel1.setFont(new java.awt.Font("华文隶书", 1, 18));jLabel1.setForeground(new java.awt.Color(0, 0, 255));jLabel1.setText("电脑基本配置");jButton1.setText("显示");jButton1.addActionListener(new java.awt.event.ActionListener() {public void actionPerformed(java.awt.event.ActionEvent evt) {jButton1ActionPerformed(evt);}});jButton2.setText("清空");jButton2.addActionListener(new java.awt.event.ActionListener() {public void actionPerformed(java.awt.event.ActionEvent evt) {jButton2ActionPerformed(evt);}});jButton3.setText("退出");jButton3.addActionListener(new java.awt.event.ActionListener() {public void actionPerformed(java.awt.event.ActionEvent evt) {jButton3ActionPerformed(evt);}});-----------------------------略-----------------------------------private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { S tring computer = hh();jTextArea1.setText(computer);}private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) { j TextArea1.setText(null);}private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) { S ystem.exit(0);}public String hh(){S tring computer1 = "";C omputerStore SCStore = new StudentComputerStore();ComputerStore HCStore = new HomeComputerStore();ComputerStore DCStore = new DeluxeComputerStore();if(jRadioButton1.isSelected()){Computer computer = SCStore.orderComputer("student");computer1 = "---- 都鹏订购了一台 " + computer + "\n";}else if(jRadioButton2.isSelected()){Computer computer = HCStore.orderComputer("home");computer1 = "---- 都鹏订购了一台 " + computer + "\n";}else if(jRadioButton3.isSelected()){Computer computer = DCStore.orderComputer("deluxe");computer1 = "---- 都鹏订购了一台 " + computer + "\n"; }return computer1;}public static void main(String args[]) {java.awt.EventQueue.invokeLater(new Runnable() {public void run() {new ComputerTestDrive().setVisible(true);}});}private javax.swing.ButtonGroup buttonGroup1;private javax.swing.JButton jButton1;private javax.swing.JButton jButton2;private javax.swing.JButton jButton3;private javax.swing.JLabel jLabel1;private javax.swing.JPanel jPanel1;private javax.swing.JPanel jPanel2;private javax.swing.JPanel jPanel3;private javax.swing.JRadioButton jRadioButton1;private javax.swing.JRadioButton jRadioButton2;private javax.swing.JRadioButton jRadioButton3;private javax.swing.JScrollPane jScrollPane1;private javax.swing.JTextArea jTextArea1;}四、运行结果。

相关文档
最新文档