为什么用结构性模式?
结构性模式
关注点“怎样组合对象/类
?”所以我们关注下类的组合关系类结构型模式
关心类的组合,由多个类可以组合成一个更大的(继承)对象结构型模式
关心类与对象的组合,通过关联关系
在一个类中定义另一个类的实例对象(组合)- 根据“
合成复用原则
”,在系统中尽量使用关联关系来替代继承关系
,因此大部分结构型模式都是对象结构型模式
。
- 适配器模式(Adapter Pattern):两个不兼容接口之间适配的桥梁。
- 桥接模式(Bridge Pattern):相同功能抽象化与实现化解耦,抽象与实现可以独立升级。
- 过滤器模式(Filter、Criteria Pattern):使用不同的标准来过滤一组对象。
- 组合模式(Composite Pattern):相似对象进行组合,形成树形结构。
- 装饰器模式(Decorator Pattern):向一个现有的对象添加新的功能,同时又不改变其结构。
- 外观模式(Facade Pattern):向现有的系统添加一个接口,客户端访问此接口来隐藏系统的复杂性。
- 享元模式(Flyweight Pattern):尝试重用现有的同类对象,如果未找到匹配的对象,则创建新对象。
- 代理模式(Proxy Pattren):一个类代表另一个类的功能。
🍭结构性模式之外观模式(Facade Pattern)
🍎外观模式
外观模式(Facade)模式
又叫做门面模式
,是一种通过为多个复杂的子系统提供一个一致的接口
,而使这些子系统更加容易被访问的模式。
🍔代码实现
public class Police {public void register(String name) {System.out.println(name + "已办理落户");}
}
public class Social {public void handleSocial(String name) {System.out.println(name + "您的社保关系已经转移......");}
}
public class Edu {public void assignSchool(String name) {System.out.println(name + "您的的孩子明天可以去上学了......");}
}
public class WeiXinFacade {Police police = new Police();Social social = new Social();Edu edu = new Edu();public void handleXX(String name) {police.register(name);social.handleSocial(name);edu.assignSchool(name);}
}
public class MainTest {public static void main(String[] args) {// 没有外观模式以前
// Police police = new Police();
// police.register("张三");
//
// Social social = new Social();
// social.handleSocial("张三");
//
// Edu edu = new Edu();
// edu.assignSchool("张三");// 有外观模式以后WeiXinFacade weiXinFacade = new WeiXinFacade();weiXinFacade.handleXX("张三");}
}
张三已办理落户
张三您的社保关系已经转移......
张三您的的孩子明天可以去上学了......
🍕应用场景
- 去医院看病,可能要去挂号、门诊、划价、取药,让患者或患者家属觉得很复杂,如果有提供接待人员,只让接待人员来处理,就很方便。以此类比…
- Java 的三层开发模式。
- 分布式系统的网关
- Tomcat 源码中的 RequestFacade 干什么的?
- …