装饰,外观模式
其他
2019-07-05 21:57:30
阅读次数: 0
实验目的与任务 目的:熟悉UML的使用,熟悉装饰、外观模式。
任务:按照实验内容要求,完成使用装饰、外观模式实现实验内容。 |
预习内容 复习课程的内容,熟悉装饰、外观模式的使用。 |
实验内容及要求
1、食堂面店价格计算如下:面5元,加鸡蛋2元,加大排5元,加鱼排5元,请结合装饰模式,给出类图并实现。
2、有如下场景:电脑的启动过程为:cpu、内存、硬盘,关闭过程相反,请结合外观模式给出类图并实现。 |
实验结果(可续页) Component.java:
public interface Component { public String desc(); public int price(); public void show(); } |
Noodle.java
public class Noodle implements Component { @Override public String desc() { // TODO Auto-generated method stub return "Noodle"; } @Override public int price() { // TODO Auto-generated method stub return 5; } @Override public void show() { // TODO Auto-generated method stub System.out.println("您点的是:"+this.desc()+"价格"+this.price()); } } |
Decorator.java:
public abstract class Decorator implements Component{ public Component c; public Decorator(Component c){ this.c=c; } } |
EggDecorator.java:
public class EggDecorator extends Decorator{ public EggDecorator(Component c) { super(c); // TODO Auto-generated constructor stub } @Override public String desc() { // TODO Auto-generated method stub return c.desc()+",eggs"; } @Override public int price() { // TODO Auto-generated method stub return c.price()+2; } @Override public void show() { // TODO Auto-generated method stub System.out.println("您点的是:"+this.desc()+"价格"+this.price()); } } |
ChopDecorator.java:
public class ChopDecorator extends Decorator{ public ChopDecorator(Component c) { super(c); // TODO Auto-generated constructor stub } @Override public String desc() { // TODO Auto-generated method stub return c.desc()+",chop"; } @Override public int price() { // TODO Auto-generated method stub return c.price()+5; } @Override public void show() { // TODO Auto-generated method stub System.out.println("您点的是:"+this.desc()+"价格"+this.price()); } } |
FishchopDecorator.java:
public class FishchopDecorator extends Decorator{ public FishchopDecorator(Component c) { super(c); // TODO Auto-generated constructor stub } @Override public String desc() { // TODO Auto-generated method stub return c.desc()+",fishchop"; } @Override public int price() { // TODO Auto-generated method stub return c.price()+5; } @Override public void show() { // TODO Auto-generated method stub System.out.println("您点的是:"+this.desc()+"价格"+this.price()); } } |
Main.java:
public class Main { public static void main(String[] args){ //单点面 Noodle noodle=new Noodle(); noodle.show(); //加鸡蛋 EggDecorator eggDecorator=new EggDecorator(noodle); eggDecorator.show(); //加大排 ChopDecorator chopDecorator=new ChopDecorator(noodle); chopDecorator.show(); //加鸡蛋加鱼排 FishchopDecorator fishchopDecorator=new FishchopDecorator(eggDecorator); fishchopDecorator.show(); } } |
结果: 类图: 2, 子系统的角色 Cpu.java Memory.java HardDisk.java 门面Facade.java 类图: 思考题:
- 购物清单一般由购物人、购物清单、购物总额组成,请结合装饰模式,给出设计的类图?
2、门面模式是否符合开闭原则,请举例说明? 不符合开闭原则 当系统内部需要增加新的内容时,门面为了能够应用上相应的改变,在门面中也需要添加对其的调用。 比如家里的电器,空调,冰箱,烤炉,电脑等,需要用一个总电闸来控制开关,而如果家里新添加了一个电器,就要对总电闸里面的调用进行修改 |
转载自blog.csdn.net/yszbrzdd/article/details/93521588