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));
	}

}
原文地址:https://www.cnblogs.com/budoudou/p/2101039.html