實驗二 適配器模式和橋接模式設計實驗及其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();

       }

}

運行結果:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM