Decorative, appearance mode

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.

Content preview

Review the contents of the course, familiar with the decoration, using the appearance patterns.

Experiment contents and requirements

  • Decorative patterns:

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.

  • Facade pattern:

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

类图:

思考题:

  1. 购物清单一般由购物人、购物清单、购物总额组成,请结合装饰模式,给出设计的类图?

 

2、门面模式是否符合开闭原则,请举例说明?

不符合开闭原则

当系统内部需要增加新的内容时,门面为了能够应用上相应的改变,在门面中也需要添加对其的调用。

比如家里的电器,空调,冰箱,烤炉,电脑等,需要用一个总电闸来控制开关,而如果家里新添加了一个电器,就要对总电闸里面的调用进行修改

 

 

 

 

 

 

 

 

 

 

Guess you like

Origin blog.csdn.net/yszbrzdd/article/details/93521588