java 外观模式

java 外观模式

外观模式:提供了一个统一的接口,用来访问子系统中的一群接口。外观定义了一个高层接口,让子系统更容易使用。

实例如下:

class Amplifier { // 扩音器
	String description;  Tuner tuner;  DvdPlayer dvd;  CdPlayer cd;
	public Amplifier( String description ) { this.description = description; } 
	public void on() { System.out.println( description + " on" ); }
	public void off() { System.out.println( description + " off" ); }
	public void setStereoSound() { System.out.println( description + " stereo mode on" ); } 
	public void setSurroundSound() {
		System.out.println( description + " surround sound on( 5 speakers, 1 subwoofer )" );
	} 
	public void setVolume(int level) {
		System.out.println( description + " setting volume to " + level );
	}
	public void setTuner( Tuner tuner ) {
		System.out.println( description + " setting tuner to " + dvd );
		this.tuner = tuner;
	}  
	public void setDvd( DvdPlayer dvd ) {
		System.out.println( description + " setting DVD player to " + dvd );
		this.dvd = dvd;
	} 
	public void setCd( CdPlayer cd ) {
		System.out.println( description + " setting CD player to " + cd );
		this.cd = cd;
	} 
	public String toString() { return description; }
}
class CdPlayer { // CD播放机
	String description;  int currentTrack;	
	Amplifier amplifier;  String title;		
	public CdPlayer( String description, Amplifier amplifier ) {
		this.description = description;
		this.amplifier = amplifier;
	} 
	public void on() { System.out.println( description + " on" ); } 
	public void off() { System.out.println( description + " off" ); }
	public void eject() {
		title = null;
		System.out.println( description + " eject" );
	} 
	public void play( String title ) {
		this.title = title;
		currentTrack = 0;
		System.out.println( description + " playing \"" + title + "\"" );
	}
	public void play( int track ) {
		if ( title == null ) {
			System.out.println( description + " can't play track " + currentTrack + 
					", no cd inserted" );
		} else {
			currentTrack = track;
			System.out.println( description + " playing track " + currentTrack );
		}
	}
	public void stop() {
		currentTrack = 0;
		System.out.println( description + " stopped" );
	} 
	public void pause() {
		System.out.println( description + " paused \"" + title + "\"" );
	} 
	public String toString() { return description; }
}
class DvdPlayer { // 数字视频播放器
	String description;  int currentTrack;	
	Amplifier amplifier;  String movie;		
	public DvdPlayer( String description, Amplifier amplifier ) {
		this.description = description;
		this.amplifier = amplifier;
	} 
	public void on() { System.out.println( description + " on" ); }
	public void off() { System.out.println( description + " off" ); }
    public void eject() {
		movie = null;
    	System.out.println( description + " eject" );
    } 
	public void play( String movie ) {
		this.movie = movie;  currentTrack = 0;
		
		System.out.println( description + " playing \"" + movie + "\"" );
	}
	public void play( int track ) {
		if ( movie == null ) {
			System.out.println( description + " can't play track " + track + " no dvd inserted" );
		} else {
			currentTrack = track;
			System.out.println( description + " playing track " + currentTrack + " of \"" + movie + "\"" );
		}
	}
	public void stop() {
		currentTrack = 0;
		System.out.println( description + " stopped \"" + movie + "\"" );
	} 
	public void pause() {
		System.out.println( description + " paused \"" + movie + "\"" );
	}
	public void setTwoChannelAudio() {
		System.out.println( description + " set two channel audio" );
	} 
	public void setSurroundAudio() {
		System.out.println( description + " set surround audio" );
	} 
	public String toString() { return description; }
}
class PopcornPopper { // 爆米花
	String description;	
	public PopcornPopper( String description ) {
		this.description = description;
	} 
	public void on() { System.out.println( description + " on" ); }
	public void off() { System.out.println( description + " off" ); }
	public void pop() { System.out.println( description + " popping popcorn!" ); }
	public String toString() { return description; }
}
class Projector { // 投影机
	String description;  DvdPlayer dvdPlayer;		
	public Projector( String description, DvdPlayer dvdPlayer ) {
		this.description = description;  this.dvdPlayer = dvdPlayer;		
	} 
	public void on() { System.out.println( description + " on" ); } 
	public void off() { System.out.println( description + " off" ); }
	public void wideScreenMode() {
		System.out.println( description + " in widescreen mode( 16x9 aspect ratio )" );
	}
	public void tvMode() {
		System.out.println( description + " in tv mode( 4x3 aspect ratio )" );
	}  
	public String toString() { return description; }
}
class Screen { // 银幕
	String description;
	public Screen( String description ) { this.description = description; }
	public void up() { System.out.println(description + " going up"); }
	public void down() { System.out.println(description + " going down"); }
	public String toString() { return description; }
}
class TheaterLights { // 剧场灯光
	String description;
	public TheaterLights( String description ) {
		this.description = description;
	}
	public void on() { System.out.println(description + " on"); }
	public void off() { System.out.println(description + " off"); }
	public void dim( int level ) { System.out.println( description + " dimming to " + level  + "%" ); }
	public String toString() { return description; }
}
class Tuner { // 调音器
	String description;  Amplifier amplifier;  double frequency;
	public Tuner( String description, Amplifier amplifier ) {
		this.description = description;
	}
	public void on() { System.out.println( description + " on" ); }
	public void off() { System.out.println( description + " off" ); }
	public void setFrequency( double frequency ) {
		System.out.println( description + " setting frequency to " + frequency );
		this.frequency = frequency;
	}
	public void setAm() { System.out.println( description + " setting AM mode" ); }
	public void setFm() { System.out.println( description + " setting FM mode" ); }
	public String toString() { return description; }
}
class HomeTheaterFacade { // 家庭影院
	Amplifier amp;  Tuner tuner;  DvdPlayer dvd;  CdPlayer cd;
	Projector projector;  TheaterLights lights;  Screen screen;  PopcornPopper popper;
	public HomeTheaterFacade( Amplifier amp, Tuner tuner, DvdPlayer dvd, CdPlayer cd, 			
			Projector projector, Screen screen, TheaterLights lights, PopcornPopper popper ) {
		this.amp = amp;  this.tuner = tuner;  this.dvd = dvd;  this.cd = cd;
		this.projector = projector;  this.screen = screen;
		this.lights = lights;  this.popper = popper;
	} 
	public void watchMovie( String movie ) {
		System.out.println( "Get ready to watch a movie..." );
		popper.on();  popper.pop();  lights.dim( 10 );  screen.down();  projector.on();
		projector.wideScreenMode();  amp.on();  amp.setDvd( dvd );  amp.setSurroundSound();
		amp.setVolume( 5 );  dvd.on();  dvd.play( movie );
	} 
	public void endMovie() {
		System.out.println( "Shutting movie theater down..." );
		popper.off();  lights.on();  screen.up();  projector.off();
		amp.off();  dvd.stop();  dvd.eject();  dvd.off();
	}
	public void listenToCd( String cdTitle ) {
		System.out.println( "Get ready for an audiopile experence..." );
		lights.on();  amp.on();  amp.setVolume( 5 );  amp.setCd( cd );
		amp.setStereoSound();  cd.on();  cd.play( cdTitle );
	}
	public void endCd() {
		System.out.println( "Shutting down CD..." );
		amp.off();  amp.setCd( cd );  cd.eject();  cd.off();
	}
	public void listenToRadio( double frequency ) {
		System.out.println( "Tuning in the airwaves..." );
		tuner.on();  tuner.setFrequency( frequency );  amp.on();
		amp.setVolume( 5 );  amp.setTuner( tuner );
	}
	public void endRadio() {
		System.out.println( "Shutting down the tuner..." );
		tuner.off();  amp.off();
	}
}
class HomeTheaterTestDrive { // 家庭影院测试驱动程序
	public static void main( String[] args ) {
		Amplifier amp = new Amplifier( "Top-O-Line Amplifier" );
		Tuner tuner = new Tuner( "Top-O-Line AM/FM Tuner", amp );
		DvdPlayer dvd = new DvdPlayer( "Top-O-Line DVD Player", amp );
		CdPlayer cd = new CdPlayer( "Top-O-Line CD Player", amp );
		Projector projector = new Projector( "Top-O-Line Projector", dvd );
		TheaterLights lights = new TheaterLights( "Theater Ceiling Lights" );
		Screen screen = new Screen( "Theater Screen" );
		PopcornPopper popper = new PopcornPopper( "Popcorn Popper" ); 
		HomeTheaterFacade homeTheater = 
			new HomeTheaterFacade( amp, tuner, dvd, cd, projector, screen, lights, popper ); 
		homeTheater.watchMovie( "Raiders of the Lost Ark" );
		homeTheater.endMovie();
	}
}
---------------------------------------------------------------------------------
E:\java>java Test0610
Get ready to watch a movie...
Popcorn Popper on
Popcorn Popper popping popcorn!
Theater Ceiling Lights dimming to 10%
Theater Screen going down
Top-O-Line Projector on
Top-O-Line Projector in widescreen mode( 16x9 aspect ratio )
Top-O-Line Amplifier on
Top-O-Line Amplifier setting DVD player to Top-O-Line DVD Player
Top-O-Line Amplifier surround sound on( 5 speakers, 1 subwoofer )
Top-O-Line Amplifier setting volume to 5
Top-O-Line DVD Player on
Top-O-Line DVD Player playing "Raiders of the Lost Ark"
Shutting movie theater down...
Popcorn Popper off
Theater Ceiling Lights on
Theater Screen going up
Top-O-Line Projector off
Top-O-Line Amplifier off
Top-O-Line DVD Player stopped "Raiders of the Lost Ark"
Top-O-Line DVD Player eject
Top-O-Line DVD Player off
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值