zoukankan      html  css  js  c++  java
  • 实验二 适配器模式和桥接模式设计实验及其Java实现

    开课实验室:  开课时间: 2016年**月**日            实验报告:    年  月   日 

    学院名称

     

    年级、专业、班

     

    学号

     

    姓名

     

    同组姓名

     

    课程名称

    软件架构

    实验项目名称

    实验二 适配器模式和桥接模式设计实验

    指导教师

     

    实验类型

    验证         综合         设计          创新  

    成绩

     

    教师评语

     

                                                         教师签名:

                                                                     年  月 

                             

    一、实验目的

    通过本实验的学习,了解软件体系结构与软件体系设计的基本思想,掌握工厂方法、抽象工厂模式等软件体系结构的设计与实现方法,利用Rose软件绘制软件体系的静态结构图,并利用面向对象的程序设计语言模拟实现工厂方法、抽象工厂模式,为今后软件开发与设计的学习奠定基础。

    二、实验环境

     实验仪器为PC机一台,安装StarUML软件和MyEclipse软件。

    三、实验内容

    1、熟悉StarUML软件的界面和基本操作。

    2、掌握StarUML软件的基本使用方法,能够运用StarUML软件绘制适配器模式、桥接模式的UML类图和模式结构图。

    3、学习利用java语言实现代理适配器模式、桥接模式,并确保代码运行正确无误。

    四、实验步骤

    1、熟悉StarUML的常用功能。

    2、使用StarUML绘制类图;

    3、适配器模式设计与实现:“一个软件团队开发绘图系统,设计了圆对象(Circle)、矩形对象(Rectangle),线对象(Line)都支持Draw()函数,即可以通过Draw()函数绘制图形。为了加快项目进度,将角度对象(Angle)绘制功能交给了合作团队实现。但合作团队将角度对象绘制函数定为了DrawAngle()。绘图系统提供给用户后,用户不满意,希望能统一的调用,不用记太多命令。”使用StarUML绘制适配器模式结构图,并运用面向对象编程语言实现该模式。

    4、桥接模式设计与实现:“一个咖啡店可以提供大杯(JorumCoffee)、中杯(MediumCoffee)、小杯(SmallCoffee)的咖啡(Coffee),为了满足不同用户的口味,在咖啡中可以添加牛奶(Milk),或者糖(Sugar),或者柠檬(Lemon),提供给用户不同口味的组合,如大杯咖啡加牛奶,中杯咖啡加糖,小杯咖啡加柠檬,小杯咖啡加糖等。”使用桥接模式设计该系统并绘制相应的类图,并用面向对象编程语言实现该模式。

    适配器模式设计与实现:

     

    package Adapter;

    public interface Draw {

          void Draw();

    }

    package Adapter;

    public class Circle implements Draw {

    public void Draw() {

    System.out.println("Draw a Circle");

    }

    }

    package Adapter;

    public class Line implements Draw {

    public void Draw() {

    System.out.println("Draw a Line");

    }

    }

    package Adapter;

    public class Angle {

          public void DrawAngle(){

                 System.out.println("Draw a Angle");

          }

    }

    package Adapter;

    public class AngleAdapter implements Draw {

    private Angle angle;

    public AngleAdapter(Angle a)

    {

             this.angle = a;

    }

    public void Draw() {

    angle.DrawAngle();    

    }

    }

    package Adapter;

    public class Test {

          public static void main(String[] args) {

                 // TODO Auto-generated method stub

                 Rectangle rec = new Rectangle();

            Circle cir = new Circle();

            Line lin = new Line();

            Angle an = new Angle();

            rec.Draw();

            cir.Draw();

            lin.Draw();

            AngleAdapter ad = new AngleAdapter(an);

            ad.Draw();

          }

    }

    运行结果:

     

    桥接模式模式设计与实现:

     

    package Bridge;

     

    public class Coffee {

           protected Taste taste;

           public Taste getTaste() {

           return taste;

           }

           public void setTaste(Taste taste) {

           this.taste = taste;

           }

           public void add(){

           System.out.println("I have a cup of coffee");

           }

    }

    package Bridge;

     

    public class JorumCoffee extends Coffee {

    public void add(){

    System.out.println("I have a cup of JorumCoffee  "+taste.Add()+"  in");

    }

    }

    package Bridge;

     

    public class MediumCoffee extends Coffee {

    public void add(){

    System.out.println("I have a cup of MediumCoffee  "+taste.Add()+"  in");

    }

    }

    package Bridge;

     

    public class SmallCoffee extends Coffee {

    public void add(){

    System.out.println("I have a cup of SmallCoffee  "+taste.Add()+"  in");

    }

    }

    package Bridge;

     

    public abstract class Taste {

           public abstract String Add();

     

    }

    package Bridge;

     

    public class Lemon extends Taste {

    public String Add() {

    return "Lemon";

    }

    }

    package Bridge;

     

    public class Milk extends Taste {

    public String Add() {

    return "Milk";

    }

    }

    package Bridge;

     

    public class Sugar extends Taste {

    public String Add() {

    return "Sugar";

    }

    }

    package Bridge;

     

    public class Test {

     

           public static void main(String[] args) {

                  // TODO Auto-generated method stub

                  Milk milk=new Milk();

                 Sugar sugar = new Sugar();

                 Lemon lemon = new Lemon();

                 Coffee cof=new JorumCoffee();

                 cof.setTaste(milk);

                 cof.add();

                 Coffee mc = new MediumCoffee();

                 mc.setTaste(sugar);

                 mc.add();

                 Coffee sc = new SmallCoffee();

                 sc.setTaste(lemon);

                 sc.add();

           }

    }

    运行结果:

     

  • 相关阅读:
    WF4 工作流事件顺序
    审批工作流系统预览
    系统框架最终集大成之——目录
    11.34 为什么框架没有提供代码设计器或代码生成器?
    11.35 如何编写自动任务?
    11.37 如何在系统中记录日志?
    11.38 CastleActiveRecord中如何保证多线程并发操作的安全与成功?
    关于数据库移植方面的记录
    十二、 结语
    datagridview某列编辑时显示为大写
  • 原文地址:https://www.cnblogs.com/luofay/p/6099047.html
Copyright © 2011-2022 走看看