Purpose and task Objective: familiar with UML familiar decoration, appearance mode. Tasks: in accordance with the requirements of the experiment content, complete use of decorative appearance model to achieve experimental content. |
Experiment contents and requirements
1, canteen surface shop price is calculated as follows: surface 5 yuan, add eggs 2 yuan, increase row of five dollars, plus rafts 5-, please decorative binding mode, and FIG class given implementation.
2, the following scenario: the computer boot process: Instead cpu, memory, hard disk, a closed process, in conjunction with FIG appearance given pattern class and implemented. |
The results (available Continued) 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、门面模式是否符合开闭原则,请举例说明? 不符合开闭原则 当系统内部需要增加新的内容时,门面为了能够应用上相应的改变,在门面中也需要添加对其的调用。 比如家里的电器,空调,冰箱,烤炉,电脑等,需要用一个总电闸来控制开关,而如果家里新添加了一个电器,就要对总电闸里面的调用进行修改 |