结构性设计模式之门面模式_积跬步,至千里。的技术博客_51CTO博客
source link: https://blog.51cto.com/u_13494008/5580655
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
结构性设计模式之门面模式
推荐 原创结构性设计模式之门面模式
门面模式(Facade Pattern)又叫外观模式,属于结构性模式。
它提供一个统一的接口去访问多个子系统的多个不同的接口,它为子系统中的一组接口提供一个统一的高层接口。使得子系统更容易使用。
客户端不需要知道系统内部的复杂联系,只需定义系统的入口。即在客户端和复杂系统之间再加一层,这一层将调用顺序、依赖关系等处理好。
为复杂的模块或子系统提供外界访问的模块。
子系统相对独立。
预防额外操作带来的风险。
降低访问复杂系统的内部子系统时的复杂度,简化客户端之间的接口。
减少系统相互依赖。
提高灵活性。
提高安全性。
不符合开闭原则,如果要改东西很麻烦,继承重写都不合适。也就是说系统可以提供新的功能模块而不必进行修改。
门面模式主要包含2种角色:
1.外观角色(Facade):
外观角色也称门面角色,系统对外的统一接口;
2.子系统角色(SubSystem):
可以同时有一个或多个SubSystem。每个SubSytem都不是一个单独的类,而是一个类的集合。
SubSystem并不知道Facade的存在,对于SubSystem而言,Facade只是另一个客户端而已(即Facade对SubSystem透明)
门面模式的基本使用
创建子系统角色
创建2个创建子系统角色:SubSystemA 与SubSystemB
public class SubSystemA {
public void subSystem() {
System.out.println("subSystem A");
}
}
public class SubSystemB {
public void subSystem() {
System.out.println("subSystem B");
}
}
创建外观角色
public class Facade {
private SubSystemA a = new SubSystemA();
private SubSystemB b = new SubSystemB();
/**
* 提供对外接口
*/
public void subSystemA() {
this.a.subSystem();
}
/**
* 提供对外接口
*/
public void subSystemB() {
this.b.subSystem();
}
}
客户端调用
public static void main(String[] args) {
Facade facade = new Facade();
facade.subSystemA();
facade.subSystemB();
}
门面模式实现商城下单
如商城系统中的下单,下单过程可能涉及多个模块子系统的联动操作,如果分别发送网络请求各个模块子系统的接口,会增加一定复杂度与额外的网络请求。
此时可以采取门面模式,将所有相关接口整合到一个接口中,由后端提供一个接口给前端调用。
假设在一个商城系统中,涉及库存系统、支付系统、物流系统、入口系统。用户下单时进行校验库存,验证支付,最后发货这一整个过程串联起来,提供一个统一接口供客户端调用。
public class StockSys {
/**
* 库存校验
*/
public Boolean verify(){
if (Math.random()*10 >5) {
System.out.println("StockSys verify success");
return true;
}
System.out.println("StockSys verify fail");
return false;
}
}
public class PaySys {
/**
* 支付
*/
public Boolean pay() {
if (Math.random()*10 >2) {
System.out.println("PaySys pay success");
return true;
}
System.out.println("PaySys pay fail");
return false;
}
}
public class LogisticsSys {
/**
* 发货
*/
public void ship() {
System.out.println("logistics ship");
}
}
public class MySys {
StockSys stockSys = new StockSys();
PaySys paySys = new PaySys();
LogisticsSys logisticsSys = new LogisticsSys();
public void order() {
if (stockSys.verify()) {
if (paySys.pay()) {
logisticsSys.ship();
}
}
}
}
客户端调用
public static void main(String[] args) {
new MySys().order();
}
StockSys verify success
PaySys pay success
logistics ship
StockSys verify fail
StockSys verify success
PaySys pay fail
Recommend
-
80
《三国演义》中有曰:刘备、诸葛亮趁曹操赤壁之战失利,大肆扩充地盘,先后占领荆州大部地区,引起东吴孙权的警惕。为了限制刘备势力的发展,鲁肃奉命向刘备讨还荆州,但遭到拒绝。东吴大都督周瑜向孙权献计:趁刘备的甘夫人病故,用孙权的妹妹孙仁为诱饵,将刘备“...
-
10
Python 设计模式——门面模式 发表于 2020-12-25 ...
-
1
积跬步至千里:QUIC 协议在蚂蚁集团落地之综述 作者:孔令涛 自 2015 年以来,QUIC 协议开始在 IETF 进行标准化并被国内外各大厂商相继落地。鉴于 QUIC 具备“0RTT 建联”、“支持连接迁移”等诸多优势,并将成为下一代互联网协议:...
-
5
积跬步方致千里:苹果新CarPlay给国内同行恶补了一课紫金山科技·2022-06-10 12:51新一代CarPlay虽然谈不上颠覆,但足够令竞争对手们望其项背了...
-
6
结构型设计模式之代理模式 原创 结构型设计模式之代理模式 代理模式(Proxy Pattern)属于结构型模式。
-
4
结构型设计模式之享元模式 推荐 原创 享元模式(Flyweight Pattern)又称为轻量级模式,是对象池的一种实现。属于结构型...
-
3
结构型设计模式之桥接模式 精选 原创 结构型设计模式之桥接模式
-
3
行为型设计模式之模板方法模式模板方法模式 模板方法模式(Template Method Pattern)属于行为型设计模式。 它是指定义一个操作中的算法的框架,而将一些步骤延迟到子类中。使得子...
-
5
创建型设计模式之建造者模式 精选 原创 丨Jack_Chen丨 2022-08-30 21:19:44
-
5
访问者模式 访问者模式属于行为型模式。它是一种将数据结构与数据操作分离的设计模式。是指封装一些作用于某种数据结构中的各元素的操作,它可以在不改变数据结构的前提下定义作用于这些元素的新的操作。
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK