您当前的位置: 首页 >  Java

小志的博客

暂无认证

  • 0浏览

    0关注

    1217博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

java设计模式——外观模式

小志的博客 发布时间:2020-06-15 15:26:02 ,浏览量:0

目录
    • 一、原型模式的定义与类型
    • 二、原型模式的适用场景
    • 三、外观模式的优点
    • 四、外观模式的缺点
    • 五、外观模式相关的设计模式
    • 六、外观模式简单示例

一、原型模式的定义与类型

1、定义

  • 又叫门面模式,提供了一个统一的接口,用来访问子系统中的一群接口
  • 外观模式定义了一个高层接口,让子系统更容易使用

2、类型

  • 结构型
二、原型模式的适用场景
  • 子系统越来越复杂,增加外观模式提供简单调用接口
  • 构建多层系统,利用外观对象作为每层的入口,简化层间调用
三、外观模式的优点
  • 简化了调用过程,无需了解深入子系统,防止带来风险。
  • 减少系统依赖,松散耦合
  • 更好的划分访问层次
  • 符合迪米特法则,即最少知道原则
四、外观模式的缺点
  • 增加子系统、扩展子系统行为容易引入风险
  • 不符合开闭原则
五、外观模式相关的设计模式
  • 外观模式和中介者模式
  • 外观模式和单例模式
  • 外观模式和抽象工厂模式
六、外观模式简单示例

1、模拟一个积分礼物类

package com.rf.designPatterns.facade;
/**
 * @description: 模拟(积分礼物类)
 * @author: xiaozhi
 * @create: 2020-06-09 09:08
 */
public class PointsGift {
    private String name;//礼物名称
    //构造器
    public PointsGift(String name) {
        this.name = name;
    }
    //getter、setter方法
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
}

2、模拟(校验积分资格子系统)

package com.rf.designPatterns.facade;
/**
 * @description: 模拟(校验积分资格子系统)
 * @author: xiaozhi
 * @create: 2020-06-09 09:11
 */
public class QualifyService {
    //判断积分资格是否通过
    public boolean isAvailable(PointsGift pointsGift){
        System.out.println("校验"+pointsGift.getName()+" 积分资格通过,库存通过");
        return true;
    }
}

3、模拟(积分支付子系统)

package com.rf.designPatterns.facade;
/**
 * @description: 模拟(积分支付子系统)
 * @author: xiaozhi
 * @create: 2020-06-09 09:16
 */
public class PointsPaymentService {
        //支付积分
        public boolean pay(PointsGift pointsGift){
            System.out.println("支付"+pointsGift.getName()+" 扣减积分成功。");
            return true;
        }
}

4、模拟(物流子系统)

package com.rf.designPatterns.facade;
/**
 * @description: 模拟(物流子系统)
 * @author: xiaozhi
 * @create: 2020-06-09 09:39
 */
public class ShippingService {
    //积分礼物进入物流系统的方法
    public String shipPointsGift(PointsGift pointsGift){
        //物流系统对接逻辑
        System.out.println(pointsGift.getName()+" 进入物流系统");
        //返回订单编号
        String shippingOrderNum="666";
        return  shippingOrderNum;
    }
}

5、模拟积分礼物兑换(外观类)

package com.rf.designPatterns.facade;
/**
 * @description: 积分礼物兑换(外观类)
 * @author: xiaozhi
 * @create: 2020-06-09 09:43
 */
public class GiftExchangeService {
    //因为没有引入spring框架,直接去创建实例对象
    private PointsPaymentService pointsPaymentService =new PointsPaymentService();
    private QualifyService qualifyService=new QualifyService();
    private ShippingService shippingService=new ShippingService();

    //对外提供一个礼物兑换的方法
    public void giftExchange(PointsGift pointsGift){
        //先校验积分资格是否通过
        if(qualifyService.isAvailable(pointsGift)){
            //如果积分支付成功
            if(pointsPaymentService.pay(pointsGift)){
                String orderNumber=shippingService.shipPointsGift(pointsGift);
                System.out.println("物流系统下单成功,订单号是:"+orderNumber);
            }
        }
    }
}

6、创建一个测试类,代表应用层代码

package com.rf.designPatterns.facade;
/**
 * @description: 创建一个测试类,代表应用层代码
 * @author: xiaozhi
 * @create: 2020-06-09 09:53
 */
public class Test {
    public static void main(String[] args) {
        PointsGift pointsGift = new PointsGift("T恤");
        GiftExchangeService giftExchangeService=new GiftExchangeService();
        giftExchangeService.giftExchange(pointsGift);

    }
}

7、输出结果如下: 在这里插入图片描述 8、UML类图如下: 在这里插入图片描述

关注
打赏
1661269038
查看更多评论
立即登录/注册

微信扫码登录

0.0420s