您的位置:首页 > 汽车 > 新车 > 实验08 软件设计模式及应用

实验08 软件设计模式及应用

2024/11/18 15:21:22 来源:https://blog.csdn.net/m0_51371779/article/details/127487598  浏览:    关键词:实验08 软件设计模式及应用

目录

  • 实验目的
  • 实验内容
    • 一、能播放各种声音的软件产品
      • Sound.java
      • Dog.java
      • Violin.java
      • Simulator.java
      • Application.java
      • 运行结果
    • 二、简单工厂模式--女娲造人。
      • Human.java
      • WhiteHuman.java
      • YellowHuman.java
      • BlackHuman.java
      • HumanFactory.java
      • NvWa.java
      • 运行结果
    • 三、工厂方法模式--女娲造人。
      • Human.java
      • WhiteHuman.java
      • YellowHuman.java
      • BlackHuman.java
      • HumanFactory.java
      • WhiteHumanF.java
      • YellowHumanF.java
      • BlackHumanF.java
      • NvWa.java
      • 运行结果
    • 四、适配器模式--交流电转直流电。
      • AlternateCurrent.java
      • PowerCompany.java
      • DirectCurrent.java
      • ElectricAdapter.java
      • Wash.java
      • Recorder.java
      • Application.java
      • 运行结果
    • 五、策略模式--评分方案
      • Strategy.java
      • StrategyA.java
      • StrategyB.java
      • AverageScore.java
      • Application.java
      • 运行结果

实验目的

(1) 理解设计模式的基本概念
(2) 理解设计模式遵循的原则
(3) 掌握经典设计模式及应用

实验内容

一、能播放各种声音的软件产品

理解开-闭原则(Open-Closed Principle,OCP–对扩展开放-而对修改关闭
在这里插入图片描述

Sound.java

public interface Sound {public abstract void playSound();
}

Dog.java

public class Dog implements Sound{public void playSound(){System.out.println("汪汪…汪汪");}
}

Violin.java

public class Violin implements Sound{public void playSound(){System.out.println("小提琴.梁祝");}
}

Simulator.java

public class Simulator {private Sound sound;public void setSound(Sound sound){this.sound=sound;}public void play(){if (sound!=null){sound.playSound();}else {System.out.println("没有可播放的声音");}}
}

Application.java

public class Application {public static void main(String[] args) {Simulator simulator=new Simulator();simulator.setSound(new Dog());simulator.play();simulator.setSound(new Violin());simulator.play();}
}

运行结果

在这里插入图片描述

二、简单工厂模式–女娲造人。

女娲架起了八卦炉(技术术语:建立工厂),开始造人。
过程如下:先捏泥巴成人形,再放入八卦炉里烤,最后扔到地上成长。时间烤短了,造出了“白种人”;时间烤长了,造出了“黑种人”;时间烤得不长不短,造出了“黄种人”。
在这里插入图片描述

Human.java

public interface Human {public void talk();
}

WhiteHuman.java

public class WhiteHuman implements Human{public void talk(){System.out.println("Hello");}
}

YellowHuman.java

public class YellowHuman implements Human{public void talk(){System.out.println("您好");}
}

BlackHuman.java

public class BlackHuman implements Human{public void talk(){System.out.println("i am a BlackHuman");}
}

HumanFactory.java

public class HumanFactory {public static Human createHuman(String s){Human human=null;if (s.equals(new String("WhiteHuman"))){human=new WhiteHuman();}else if (s.equals(new String("YellowHuman"))){human=new YellowHuman();}else if (s.equals(new String("BlackHuman"))){human=new BlackHuman();}return human;}
}

NvWa.java

public class NvWa {public static void main(String[] args) {Human human=null;human=HumanFactory.createHuman("WhiteHuman");human.talk();human=HumanFactory.createHuman("YellowHuman");human.talk();human=HumanFactory.createHuman("BlackHuman");human.talk();}
}

运行结果

在这里插入图片描述

三、工厂方法模式–女娲造人。

在这里插入图片描述

Human.java

public interface Human {public void talk();
}

WhiteHuman.java

public class WhiteHuman implements Human{public void talk(){System.out.println("Hello");}
}

YellowHuman.java

public class YellowHuman implements Human{public void talk(){System.out.println("您好");}
}

BlackHuman.java

public class BlackHuman implements Human{public void talk(){System.out.println("i am a BlackHuman");}
}

HumanFactory.java

public interface HumanFactory {public Human createHuman();
}

WhiteHumanF.java

public class WhiteHumanF implements HumanFactory{public Human createHuman(){return new WhiteHuman();}
}

YellowHumanF.java

public class YellowHumanF implements HumanFactory{public Human createHuman(){return new YellowHuman();}
}

BlackHumanF.java

public class BlackHumanF implements HumanFactory{public Human createHuman(){return new BlackHuman();}
}

NvWa.java

public class NvWa {public static void main(String[] args) {HumanFactory humanFactory=null;Human human=null;humanFactory=new WhiteHumanF();human=humanFactory.createHuman();human.talk();humanFactory=new YellowHumanF();human=humanFactory.createHuman();human.talk();humanFactory=new BlackHumanF();human=humanFactory.createHuman();human.talk();}
}

运行结果

在这里插入图片描述

四、适配器模式–交流电转直流电。

用户家里现有一台洗衣机,洗衣机使用交流电,现在用户新买了一台录音机,录音机只能使用直流电。由于供电系统供给用户家里的是交流电,因此用户需要用适配器将交流电转化直流电供录音机使用。
在这里插入图片描述
在这里插入图片描述

AlternateCurrent.java

public interface AlternateCurrent {public String giveAlternateCurrent();
}

PowerCompany.java

public class PowerCompany implements AlternateCurrent{public String giveAlternateCurrent(){return "10101010101010101010";}
}

DirectCurrent.java

public interface DirectCurrent {public String giveDirectCurrent();
}

ElectricAdapter.java

public class ElectricAdapter implements DirectCurrent {AlternateCurrent out;ElectricAdapter (AlternateCurrent out){this.out=out;}public String giveDirectCurrent(){String m=out.giveAlternateCurrent();StringBuffer str=new StringBuffer(m);for (int i = 0; i < str.length(); i++)if (str.charAt(i)=='0') str.setCharAt(i,'1');m=new String(str);return m;}
}

Wash.java

public class Wash {String name;Wash(){name="洗衣机";}public void turnOn(AlternateCurrent a){String s =a.giveAlternateCurrent();System.out.println(name+"使用交流电:\n"+s);System.out.println("开始洗衣物");}
}

Recorder.java

public class Recorder {String name;Recorder (){name="录音机";}public void turnOn(DirectCurrent a){String s=a.giveDirectCurrent();System.out.println(name+"使用直流电:\n"+s);System.out.println("开始录音");}
}

Application.java

public class Application {public static void main(String[] args) {AlternateCurrent aElectric =new PowerCompany();Wash wash=new Wash();wash.turnOn(aElectric);DirectCurrent dElectric=new ElectricAdapter(aElectric);Recorder recorder=new Recorder();recorder.turnOn(dElectric);}
}

运行结果

在这里插入图片描述

五、策略模式–评分方案

在多个裁判负责打分的比赛中,每位裁判给选手一个得分,选手的最后得分是根据全体裁判的得分计算出来的。请给出几种计算选手得分的评分方案(策略),对于某次比赛,可以从你的方案中选择一种方案作为本次比赛的评分方案。
在这里插入图片描述
在这里插入图片描述

Strategy.java

public interface Strategy {public double computerAverage(double []a);
}

StrategyA.java

public class StrategyA implements Strategy{public double computerAverage(double a[]){double score=0,sum=0;for(int i=0;i<a.length;i++) {sum=sum+a[i];}score=sum/a.length;return score;}
}

StrategyB.java

import java.util.Arrays;
public class StrategyB implements Strategy{public double computerAverage(double a[]){if(a.length<=2)return 0;double score=0,sum=0;Arrays.sort(a);  //排序数组for (int i=1; i<a.length-1; i++) {sum=sum+a[i];}score=sum/(a.length-2);return score;}
}

AverageScore.java

public class AverageScore {Strategy strategy;public void setStrategy(Strategy strategy){this.strategy=strategy;}public double getAverage(double a[]){return strategy.computerAverage(a);}
}

Application.java

public class Application {public static void main(String[] args) {AverageScore game=new AverageScore();game.setStrategy(new StrategyA());double []a={9.12,9.25,8.87,9.99,6.99,7.88};double aver=game.getAverage(a);System.out.println(aver);}
}

运行结果

在这里插入图片描述

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com