Stategy模式
日常生活中我们会碰到很多选择,在代码中就表现为成堆的if/else,如果我们直接在if/else中改动逻辑,很有可能将好的
逻辑就改坏了,在我们的项目中深受其害。其实我们可以将通过stategy模式解决这个问题。
比如说我们去买碟,有三种碟片可以选择:美国最新大片,经典电影,儿童电影。不同的电影收费不一样,
大片每张5元小于等于5张时按原价收费,大于5张打8折;经典电影每张4元,不打折;儿童电影一次5元,不限数量。
当然你可以加一些if/else来完成这个功能需求,但是个人觉得stategy模式可以很优雅的解决这个问题。
public abstract class DiskType {
public abstract int getPrice(int num);
}
public class Movie {
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public DiskType getType() {
return type;
}
public void setType(DiskType type) {
this.type = type;
}
private String name;
private DiskType type;
public Movie(String name, DiskType type) {
super();
this.name = name;
this.type = type;
}
}
public class ChildrenMovie extends DiskType {
@Override
public int getPrice(int num) {
return 5;
}
}
public class ClassicMovie extends DiskType {
@Override
public int getPrice(int num) {
int price = 0;
price=4*num;
return price;
}
}
public class LastestMovie extends DiskType {
@Override
public int getPrice(int num) {
int price = 0;
if(num <=5)
price=num*5;
else
price=(int) (num*5*0.8);
return price;
}
}
public static void main(String[] args) {
DiskType dt= new LastestMovie();
Movie m= new Movie("Pirates of the Caribbean 4 ",dt);
System.out.println(m.getName()+m.getType().getPrice(8));
dt= new ClassicMovie();
m= new Movie("brave heart ",dt);
System.out.println(m.getName()+m.getType().getPrice(4));
dt= new ChildrenMovie();
m= new Movie("King lion ",dt);
System.out.println(m.getName()+m.getType().getPrice(4));
}
}
浙公网安备 33010602011771号