Facade(门面模式)

Facade(门面模式)

参考文章

https://baijiahao.baidu.com/s?id=1636109114016642554&wfr=spider&for=pc
个人感觉讲的很透彻

理解

门面模式又叫外观模式
开发部门 有部门经理 后端开发 前端开发
测试部门 有部门经理 性能测试 功能测试
设计部门 有部门经理 原型设计 视觉设计
其中各个部门的经理都是部门的门面

优点

  • (子系统)部门人员可以有选择的暴露能力(方法)
  • 一个门面模式可以有很多门面模式类(可以有很多部门)
  • 与客户之间松耦合(客户不用关心这件事到底谁来做)

缺点

不符合开闭原则。所谓的开闭原则是软件工程里面一个最基本的原则:对扩展开放,对修改关闭。换句话说,你的系统可以提供新的功能模块而不必进行修改。

与代理模式的区别

这个模式乍一看还真的很像代理模式,其实还是有很大的区别的。

比如说他们都引入了中介,起到了代理的功能。但是代理模式只代理一个类,而且代理类与原类实现相同的抽象。门面类就不一样了,他代理的是一系列类,与子系统可以有不同的抽象。

代码

package facade;
// 员工类
public interface employee {
    
    
   void work();
}

package facade;
public class AEmployee implements employee{
    
    
    @Override
    public void work() {
    
    
        System.out.println("程序员A 开始构建平台架构。。。。。");
    }

    public void js() {
    
    
        System.out.println("程序员A 开始写js。。。。。");
    }
}
package facade;
public class BEmployee implements employee{
    
    
    @Override
    public void work() {
    
    
        System.out.println("程序员B开始写页面。。。。。。。。。。。。。");
    }

    public void html() {
    
    
        System.out.println("程序员B开始写html。。。。。。。。。。。。。");
    }
}

package facade;
public class CEmployee implements employee {
    
    
    @Override
    public void work() {
    
    
        System.out.println("程序员C开始写支付模块。。。。。");
    }

    public void my() {
    
    
        System.out.println("程序员C开始摸鱼。。。。。");
    }
}

package facade;

public class DepDepartment implements employee{
    
    
    AEmployee aEmployee = new AEmployee();
    BEmployee bEmployee = new BEmployee();
    CEmployee cEmployee = new CEmployee();

    @Override
    public void work() {
    
    
        System.out.println("研发经理积极协调部门内部的工作。。。。。。。。。。。。");
    }

    public void Awork(){
    
    
        aEmployee.work();
        aEmployee.js();
    }

    public void Bwork(){
    
    
        bEmployee.work();
        bEmployee.html();
    }
    public void Cwork(){
    
    
        cEmployee.work();
        cEmployee.my();
    }
}

package facade;

public class Main {
    
    
    public static void main(String[] args) {
    
    
    // DepDepartment 就像等于门面
        DepDepartment depDepartment = new DepDepartment();
        depDepartment.Awork();
        depDepartment.Bwork();
        depDepartment.work();
        depDepartment.Cwork();
    }
}

思维图

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/yuell102/article/details/107998468
今日推荐