前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >设计模式学习 - 策略模式

设计模式学习 - 策略模式

作者头像
许杨淼淼
发布2019-12-29 20:11:44
2860
发布2019-12-29 20:11:44
举报
文章被收录于专栏:醉程序醉程序醉程序

学习、梳理设计模式。

策略模式

由策略接口、多个具体的策略实现、上下文组成。由客户端来选择具体的策略实现。

一个背景,CRM系统内有多种帐号体系:手机号注册的客户、微信授权的客户、微博授权的客户。 一个场景,需要把这些不同帐号体系的ID转换为CRM系统内部的统一UserId。

策略接口及实现

策略接口

public interface UserStrategy {

    long transform2UserId(String origin);

}

手机号客户实现

public class MobileUserStrategy implements UserStrategy {

    @Override
    public long transform2UserId(String origin) {
        return 1L;
    }

}

微信客户实现

public class OpenIdUserStrategy implements UserStrategy {

    @Override
    public long transform2UserId(String origin) {
        return 3L;
    }

}

微博客户实现

public class WeiBoIdUserStrategy implements UserStrategy {

    @Override
    public long transform2UserId(String origin) {
        return 2L;
    }

}

上下文

public class UserContext {

    private UserStrategy userStrategy;

    public UserContext(UserStrategy userStrategy) {
        this.userStrategy = userStrategy;
    }

    public long getUserId(String p) {
        return this.userStrategy.transform2UserId(p);
    }

}

客户端

选择权在客户端手中,由客户端来选择具体的实现类,并从上下文中

我们来测试一把

public class ClientTest {

    public static void main(String[] args) {

        //手机号客户
        UserContext ctx = new UserContext(new MobileUserStrategy());
        System.out.println(ctx.getUserId("13800138000"));

        //微信OPENID客户
        UserContext ctx1 = new UserContext(new OpenIdUserStrategy());
        System.out.println(ctx1.getUserId("ONdasdarRAA"));

        //微博客户
        UserContext ctx2 = new UserContext(new WeiBoIdUserStrategy());
        System.out.println(ctx2.getUserId("42"));

    }

}

输出

1 3 2

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018年12月24日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 策略模式
    • 策略接口及实现
      • 上下文
        • 客户端
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档