一、实验目的
9.结合实例,熟练绘制常见的创建型设计模式结构图。
10.结合实例,熟练使用任意一种面向对象编程语言实现常见的创建型设计模式。
11.通过本实验,理解每一种创建型设计模式的模式动机,掌握模式结构,学习如何使用代码实现这些设计模式。
二、实验内容
1.使用简单工厂模式设计一个可以创建不同几何形状(Shape),如圆形(Circle)、矩形
(Rectangle)和三角形(Triangle)等的绘图工具类,每个几何图形均具有绘制draw()和擦除erase()两个方法,要求在绘制不支持的几何图形时,抛出一个 UnsupportedShapeException 异常,绘制类图并编程模拟实现。
2.用Java代码实现教材中“日志记录器”实例,如果在系统中增加一个日志记录方式——控制台日志记录(ConsoleLog),绘制类图并修改代码。
3. 计算机包含内存(RAM)、CPU等硬件设备,根据下图所示的“产品等级结构-产品族”示意图,使用抽象工厂模式实现计算机设备创建过程并绘制相应的类图。
5.某软件公司欲开发一套界面皮肤库,可以对桌面软件进行界面美化。不同的皮肤将提供视觉效果不同的按钮、文本框、组合框等界面元素,其结构如下图所示:
(2)代码实现:
public class Client{
public static void main(String args[]) {
try{ HWFactory factory; CPU tv; RAM ac;
factory=(HWFactory)XMLUtil.getBean();
tv=factory.produceCPU(); tv.play();
ac=factory.produceRAM(); ac.changeRAM();
}catch(Exception e){
System.out.println(e.getMessage());
} } }
public interface CPU{ public void play(); }
public interface HWFactory{
public CPU produceCPU(); public RAM produceRAM(); }
public class MACCPU implements CPU{
public void play(){ System.out.println(“MACCPU运行中…”); } }
public class MacFactory implements HWFactory{
public CPU produceCPU(){ return new MACCPU(); }
public RAM produceRAM(){ return new MacRAM(); } }
public class MacRAM implements RAM{
public void changeRAM(){ System.out.println(“MACRAM改变中…”); } }
public class PCCPU implements CPU{
public void play(){ System.out.println(“PCCPU运行中…”); } }
public class PCFactory implements HWFactory{
public CPU produceCPU(){ return new PCCPU(); }
public RAM produceRAM(){ } }
public class PCRAM implements RAM{
public void changeRAM(){ System.out.println(“PCRAM改变中…”); } }
public interface RAM { public void changeRAM(); }
//配置文件
import javax.xml.parsers.; import org.w3c.dom.;
import org.xml.sax.SAXException; import java.io.*;
public class XMLUtil{
public static Object getBean() {
try{DocumentBuilderFactory dFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = dFactory.newDocumentBuilder();
Document doc;
doc = builder.parse(new File(“AbstractFactoryconfig.xml”));
NodeList nl = doc.getElementsByTagName(“className”);
Node classNode=nl.item(0).getFirstChild();
String cName=classNode.getNodeValue();
Class c=Class.forName(cName); Object obj=c.newInstance();
return obj;
}catch(Exception e) {
e.printStackTrace(); return null; }
} }
4.需要提供单例模式实例的结构图(类图)和实现代码。
(1)类图实现:
(2)代码实现:
//按钮接口:抽象产品
interface Button { public void display(); }
//Spring按钮类:具体产品 //Summer按钮类同
class SpringButton implements Button {
public void display() { System.out.println(“显示浅绿色按钮。”); } }
//文本框接口:抽象产品
interface TextField { public void display(); }
//Spring文本框类:具体产品 //Summer文本框类同
class SpringTextField implements TextField {
public void display() { System.out.println(“显示绿色边框文本框。”); } }
//组合框接口:抽象产品
interface ComboBox { public void display(); }
//Spring组合框类:具体产品 //Summer 组合框类同
class SpringComboBox implements ComboBox {
public void display() { System.out.println(“显示绿色边框组合框。”); } }
//界面皮肤工厂接口:抽象工厂
interface SkinFactory {
public Button createButton(); public TextField createTextField();
public ComboBox createComboBox(); }
//Spring皮肤工厂:具体工厂 //Summer皮肤工厂类同
class SpringSkinFactory implements SkinFactory {
public Button createButton() { return new SpringButton(); }
public TextField createTextField() { return new SpringTextField(); }
public ComboBox createComboBox() { return new SpringComboBox(); } }
//客户端测试类
class Client {public static void main(String args[]) {
SkinFactory factory; Button bt; TextField tf; ComboBox cb;
factory = (SkinFactory)XMLUtil.getBean();
bt = factory.createButton(); tf = factory.createTextField(); cb = factory.createComboBox();
bt.display(); tf.display(); cb.display(); } }
6.需要提供工厂方法模式实例的结构图(类图)和实现代码。
(1)类图实现:
(2)代码实现:
public class Client{ public static void main(String args[]){ Try{ DBactory factory; Connection tv;
Statement ac; factory=(DBactory)XMLUtil.getBean();
tv=factory.createConnection(); tv.play();
ac=factory.createStatement(); ac.changeTemperature();
}catch(Exception e){ System.out.println(e.getMessage()); } } }
public interface Connection{ public void play(); }
public interface DBactory{
public Connection createConnection(); public Statement createStatement(); }
public class MYSQLConnection implements Connection{ // OracleConnection同
public void play(){ System.out.println(“MYSQL数据库连接中…”); } }
public class MYSQLFactory implements DBactory{ //OracleFactory同
public Connection createConnection(){ return new MYSQLConnection(); }
public Statement createStatement(){ return new MYSQLStatement(); } }
public class MYSQLStatement implements Statement{ // OracleStatement同
public void changeTemperature(){ System.out.println(“MYSQL数据库使用中…”); }}
public interface Statement { public void changeTemperature(); }
import javax.xml.parsers.; import org.w3c.dom.;
import org.xml.sax.SAXException; import java.io.*;
public class XMLUtil{ public static Object getBean(){
try{ DocumentBuilderFactory dFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = dFactory.newDocumentBuilder();
Document doc; doc = builder.parse(new File(“AbstractFactoryconfig.xml”));
NodeList nl = doc.getElementsByTagName(“className”);
Node classNode=nl.item(0).getFirstChild();
String cName=classNode.getNodeValue();
Class c=Class.forName(cName); Object obj=c.newInstance(); return obj;
}catch(Exception e){
e.printStackTrace(); return null; } } }
六、实验小结
1.熟练绘制常见的创建型设计模式结构图,理解每一种创建型设计模式的模式动机。
2.通过实例进一步掌握简单工厂模式、工厂方法模式、抽象工厂模式、单例模式的结构和特点,用过比较学习各模式的异同,学会如何在实际软件项目开发中合理使用相应的模式。
3.理解简单工厂模式中工厂类的作用和实现以及为何需要定义抽象产品类。
4.理解引入抽象工厂类的原因,工厂方法模式中多态性的体现以及客户代码的而编写,同时理解如何通过DOOM和Java反射机制来操作XML配置文件。
5.理解了抽象工厂模式中“开闭原则”的倾斜性,抽象工厂模式中“开闭原则”的倾斜性。
6.掌握单例模式的适用场景,在合适的情况下合理使用单例模式,避免因为不恰当的使用给系统带来负面影响。
文章知识点与官方知识档案匹配,可进一步学习相关知识Java技能树首页概览93120 人正在系统学习中
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!