- 外观模式原理
- 一个家庭影院的项目:
- 在家庭影院中引入第二个遥控器用来调用各个功能放在一个接口上
- 外观模式提供统一接口,来访问子系统中一群功能相关的接口,外观模式定义了一个高层接口,让子系统更容易使用。
- 外观模式就是使用一个函数调用系统中的很多函数
- 代码讲解:
package waiguan;
/**
* Created with IntelliJ IDEA.
* Description:
* User: wjx
* Date: 2019-04-20
* Time: 19:44
*/
public class DVD {
private static DVD dvd = null;
private DVD(){
}
public static DVD getInstance(){
if(dvd == null){
dvd = new DVD();
}
return dvd;
}
public void on(){
System.out.println("Dvd is on");
}
public void off(){
System.out.println("Dvd is off");
}
}
package waiguan;
/**
* Created with IntelliJ IDEA.
* Description:
* User: wjx
* Date: 2019-04-20
* Time: 19:44
*/
public class Popcorn {
private Popcorn(){
}
private static Popcorn popcorn = null;
public static Popcorn getInstance(){
if(popcorn==null){
popcorn = new Popcorn();
}
return popcorn;
}
public void on(){
System.out.println("Popcorn is on");
}
public void off(){
System.out.println("Popcorn is off");
}
}
- 由家庭影院统一调用:
package waiguan;
/**
* Created with IntelliJ IDEA.
* Description:
* User: wjx
* Date: 2019-04-20
* Time: 19:48
*/
public class HomeMedia {
private DVD dvd;
private Popcorn popcorn;
public HomeMedia(){
dvd = DVD.getInstance();
popcorn = Popcorn.getInstance();
}
public void on(){
dvd.on();
popcorn.on();
}
public void off(){
dvd.off();
popcorn.off();
}
}
- 测试:
package waiguan;
/**
* Created with IntelliJ IDEA.
* Description:
* User: wjx
* Date: 2019-04-20
* Time: 19:50
*/
public class MainTest {
public static void main(String[] args) {
HomeMedia homeMedia = new HomeMedia();
homeMedia.on();
homeMedia.off();
}
}
- 外观模式使这个系统中的对象对外的耦合度降低,所以加一个功能,遥控器就不需要更改,只需要该相应得功能就可以,使得系统对外部解耦。
- 外观模式和适配者模式的对比:
- 适配者模式:适配器把一个类和对象的接口转换成另一种模式
- 外观模式系统提供的对外功能的简化的功能的表现