设计模式-外观模式

外观模式(Facade Pattern)隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口。这种类型的设计模式属于结构型模式,它向现有的系统添加一个接口,来隐藏系统的复杂性。

这种模式涉及到一个单一的类,该类提供了客户端请求的简化方法和对现有系统类方法的委托调用。

 

外观模式包含如下角色:

    • Facade: 外观角色

    • SubSystem:子系统角色

示例为 公司的组建过程可谓很复杂,有很多事情需要做,如注册公司,银行开户、交税、招聘等等,可按外观模式进行代码架构实现。

定义外外观角色 统一门面入口


/**
 * <p>
 * 外观模式-门面角色-统一门面入口
 * </p>
 *
 * @since 2022/3/21 16:25
 */
public class Facade {

    public static Company openCompany(String name, String legalPerson) {
        Company company = AdminOfIndustry.register(name, legalPerson);
        Bank.openAccount(name);
        Taxation.applyTaxCode(name);
        return company;
    }

}

定义各子系统角色类,处理复杂事情

/**
 * <p>
 * 子系统角色-公司注册
 * </p>
 *
 * @since 2022/3/21 16:22
 */
public class AdminOfIndustry {
    public static Company register(String name, String legalPerson) {
        return new Company(name, legalPerson);
    }
}


/**
 * <p>
 * 子系统角色-银行开户
 * </p>
 *
 * @since 2022/3/21 16:23
 */
public class Bank {
    private String name;
    private String bankCard;

    public Bank(String name, String bankCard) {
        this.name = name;
        this.bankCard = bankCard;
    }

    public static Bank openAccount(String name) {
        return new Bank(name, IdUtil.simpleUUID());
    }
}

/**
 * <p>
 * 子系统角色-交税
 * </p>
 *
 * @since 2022/3/21 16:24
 */
public class Taxation {
    private String name;

    public Taxation(String name) {
        this.name = name;
    }

    public static Taxation applyTaxCode(String name) {
        return new Taxation(name);
    }
}

业务实体对象类

/**
 * <p>
 * 子系统角色-业务实体
 * </p>
 *
 * @since 2022/3/21 16:20
 */
@Data
public class Company {
    private String name;
    private String legalPerson;

    public Company(String name, String legalPerson) {
        this.name = name;
        this.legalPerson = legalPerson;
    }
}

 测试类

/**
 * <p>
 * 外观模式-测试类
 * </p>
 *
 * @since 2022/3/22 14:12
 */
public class Client {
    public static void main(String[] args) {
        Company company = Facade.openCompany("新世界公司", "新世界");
        System.out.println(company.toString());
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值