日常生活中我们会碰到很多选择,在代码中就表现为成堆的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)); } }