JAVA的23种设计模式---门面模式
来源:互联网 发布:知乎如何提问 编辑:程序博客网 时间:2024/06/05 18:00
概要:
该文章参考了《设计模式之禅》一书及一些前辈的博客文章
1.该文章阐述了门面模式的基础原理及示例代码;
2.该文章适合初学设计模式的技术人员研习;
3.该文章有许多不足之处,请各位大咖指正,喷子绕道;
正文:
门面模式(外观模式):要求一个子系统的外部与其内部的通信必须通过一个统一的对象进行。门面模式提供一个高层次的接口,使得子系统更易于使用。
1.门面模式示例代码实现:
package com.csdn;/** * 做饭所有的流程 * @author Administrator * */public interface Cook { //买菜 public String buyVegetables(String _vegetables); //洗菜 public void washVegetables(); //炒菜 public void cooking();}
package com.csdn;/** * 做饭每个流程具体实现 * @author Administrator * */public class CookImpl implements Cook { private String vegetables; @Override public String buyVegetables(String _vegetables) { System.out.println("买了:"+_vegetables); return this.vegetables = _vegetables; } @Override public void washVegetables() { System.out.println("开始洗:"+vegetables); } @Override public void cooking() { System.out.println("开始炒:"+vegetables); }}
package com.csdn;/** * 保姆做饭 * @author Administrator * */public class Nanny { Cook cook = new CookImpl(); //做饭流程一体化 public void cook(String _vegetables){ cook.buyVegetables(_vegetables); cook.washVegetables(); cook.cooking(); }}
package com.csdn;/** * 模拟主人命令保姆做饭 * @author Administrator * */public class Client { public static void main(String[] args) { //找到保姆 Nanny nanny = new Nanny(); //告诉保姆做“大白菜” nanny.cook("大白菜"); }}
输出:
买了:大白菜开始洗:大白菜开始炒:大白菜
注:
a:门面模式注重”统一的对象”,也就是提供一个访问子系统的接口,除了这个接口不允许有任何访问子系统的行为发生。
b:门面模式是一种常用的封装模式
c:门面模式包含了门面角色和子系统角色。
1.通用门面模式模板代码实现:
子系统
public class ClassA{ public void doSomethingA(){ //业务逻辑 }}
public class ClassB{ public void doSomethingB(){ //业务逻辑 }}
public class ClassC{ public void doSomethingC(){ //业务逻辑 }}
门面对象
public class Facade{ //被委托对象 private ClassA a = new ClassA(); private ClassB b = new ClassB(); private ClassC c = new ClassC(); //提供给外部访问方法 public void methodA(){ this.a.doSomethingA(); } public void methodB(){ this.b.doSomethingB(); } public void methodC(){ this.c.doSomethingC(); }}
注:
a:门面模式不符合开闭原则
b:门面模式应用场景:(为一个复杂模块或子系统提供一个共外界访问的接口)(外界对子系统的访问黑箱操作即可)(预防低水平人员带来的风险扩散)。
c:门面不参与子系统内的业务逻辑。例如通用模板中的methodC()方法中就不应该增加调用doSomethingA()方法,如果需要调用,需增加一个封装类。
阅读全文
0 0
- JAVA的23种设计模式---门面模式
- java设计模式----门面模式
- Java设计模式-门面模式
- Java设计模式--门面模式
- 设计模式--结构模式--门面模式--Java
- Java设计模式Facade门面设计模式
- java设计模式-门面模式Facade
- java设计模式之门面模式
- JAVA-设计模式之门面模式
- Java设计模式笔记之门面模式
- java设计模式(7)---门面模式
- Java设计模式泛型化之门面模式
- java设计模式之门面模式
- 【java】设计模式之门面模式
- java设计模式之门面模式
- java 设计模式之门面模式
- java设计模式之门面模式
- java设计模式之门面模式
- XML文档解析---SAX和StAX解析技术
- 修改 React-Native Android App 包名
- Android – Drawing multiline text on canvas If you always wanted to know how to draw multiline text
- java后台如何将rgb与16进制颜色进行转换
- Invalid bean definition with name 'dataSource' defined in class
- JAVA的23种设计模式---门面模式
- Android项目架构--知识体系简单梳理(一)
- css中position属性
- C语言单链表的3种排序算法,插入排序,冒泡排序,选择排序
- 数据结构顺序线性表C++模板
- 今日头条给我发工资744.53元 坚持原创终于有了回报
- 阿里顺丰互相拉黑,惊动国家邮政局 刘强东公开力挺顺丰
- 9.外层build.gradle文件详解
- Android_Fire