java设计模式之享元模式
- 介绍:所谓享元看名称也很容易理解,就是共享相同的资源(对象),减少对象的创建即内存的占用.
- 情景引入:平时我们想去看电影,一般都会选择去电影院,和其他人共享同一套影片,我觉得这就是享元的思想.我们大可每一个人都自己买一套影片回家看,但是这明显有资源浪费.既然大家都看的是同样的东西,为什么不聚起来一起看呢,这样子只需要购买一套影碟就行了.
- 代码:
public class Movie {
public String name;
public Movie(String name){
this.name = name;
System.out.println("New film " + name + " is available.");
}
public void play(){
System.out.println(name + " is playing");
}
}
public class Cinema {
private static final HashMap<String, Movie> movieList = new HashMap<>();
public static void display(String name){
Movie movie = movieList.get(name);
if (movie == null){
movie = new Movie(name);
movieList.put(name, movie);
}
movie.play();
}
}
上述代码很简单,一套电影就是资源,而电影院具有影片列表,假如有人需要播放影片XXX,它先找自己的影片列表中有没有,有的话直接播放,没有的话购买一份再播放,下一次如果有人来看这套电影只需要从列表中取出就行.
测试
Cinema.display("movie1");
Cinema.display("movie2");
Cinema.display("movie1");
// output:
New film movie1 is available.
movie1 is playing
New film movie2 is available.
movie2 is playing
movie1 is playing