外观模式是一种描述类于类之间关系的模式,由一个外观类将多个类进行包装,从而达到访问包装类即访问多个类的目的,看代码
普通类:
public class Model { private String name; public Model(String name){ this.name = name; } public void method(){ System.out.println(name); } }外观类: public class Facade { private Model[] models; public Facade(Model... models){ this.models = models; } public void method(){ for (Model model : models) { model.method(); } } } Client类: public class Client { public static void main(String[] args) { Model model1 = new Model("小明"); Model model2 = new Model("小红"); Facade facade = new Facade(model1,model2); facade.method(); } }这里就是简单的实现了一下封装,将从属同一类的多个对象包装在了一起,调用外观对象即可实现model类的方法;
其实不同的model类同样可以实现外观模式的包装:
model类实现的公共接口:
public interface Subject { void method(); }model1类:
public class Model1 implements Subject{ private String name; public Model1(String name){ this.name = name; } public void method(){ System.out.println(name); } }model2类:
public class Model2 implements Subject{ private String name; public Model2(String name){ this.name = name; } public void method(){ System.out.println(name); } } 外观类: public class Facade { private Subject[] subject; public Facade(Subject... subject){ this.subject = subject; } public void method(){ for (Subject subject : subject) { subject.method(); } } } Client类: public class Client { public static void main(String[] args) { Model1 model1 = new Model1("小明"); Model2 model2 = new Model2("小红"); Facade facade = new Facade(model1,model2); facade.method(); } }实际上得到的结果与第一个例子相同,不同的是这个例子用到了多态;其实model类可以不继承相同的接口,也可以使用外观模式,但外观类和例子中的就不一样了;外观模式的核心思想就是将多个类包装成外观类,之后访问外观类实现功能;