需求:使用加密狗进行软件保护,可能会使用不同的加密狗。

分析:加密狗

设计:使用策略模式,但由于策略模式需要使用人员了解哪个组件提供了软件保护服务,于是结合工厂模式对对象进行创建。由于可以使用的加密狗不会很多,所以采用了简单工厂模式。

  这样,结构大体如下:工厂、功能抽象、功能实现、功能环境。

编码:

功能抽象:

public abstract class AbstractKeyWriter
{
  internal abstract void write(string key);
}

功能实现:

internal class AWriter:AbstractKeyWriter
{
  internal override void write(string key)
  {
    throw new NotImplementedException();
  }
}

internal class BWriter:AbstractKeyWriter
{
  internal override void write(string key)
  {
    throw new NotImplementedException();
  }
}

功能环境:

internal class KeyWriterContext
{
  private AbstractKeyWriter writer;
  public KeyWriterContext() { }
  public KeyWriterContext(AbstractKeyWriter writer)
  {
    this.writer = writer;
  }
  public void setKeyWriter(AbstractKeyWriter writer)
  {
    this.writer = writer;
  }
  public void write(string key)
  {
    this.writer.write(key);
  }
}

工厂:

public class KeyWriterFactory
{
  public static AbstractKeyWriter getAWriter()
  {
    return new AWriter();
  }

  private static AbstractKeyWriter getBWriter()
  {
    return new BWriter();
  }
}

用户不能直接通过具体实现类进行调用,而只能通过环境类。

.net里没用包的概念,不能方便实现访问限制,没有只能名称空间级的访问限制,太不方便了,鄙视一下。

转载于:https://www.cnblogs.com/javaleon/p/3740553.html

策略模式、简单工厂结合相关推荐

  1. c++switch实现猜拳_策略模式+简单工厂+注解消除 if-else/switch-case

    消除代码中的 if-else/switch-case 在很多时候,我们代码中会有很多分支,而且分支下面的代码又有一些复杂的逻辑,相信很多人都喜欢用 if-else/switch-case 去实现.做的 ...

  2. 跨服务同步数据(MYSQL),@Scheduled定时任务,HttpClient分批发送数据,JSONobject,策略模式+简单工厂,异步@Async+CompletableFuture使用

    目录 1.实现远程post请求 下面首先创建HttpClient用来实现远程post请求 2.发送数据 接下来就是将获取的数据(SyncDataParam )通过http请求方式发送给另一个服务(ap ...

  3. 策略模式+简单工厂之旅游出行策略与门票折扣案例

    文章目录 策略模式+简单工厂 (1)旅游出行策略(飞机,高铁,大巴,骑行,徒步至少两种出行方式) (2)门票折扣 策略模式+简单工厂 (1)旅游出行策略(飞机,高铁,大巴,骑行,徒步至少两种出行方式) ...

  4. 策略与简单工厂模式结合的实现--收银软件的代码及UML图

    策略模式和简单工厂模式的结合:把分支判断放到环境角色中. 解决简单工厂模式中提到的问题: ●关键:分支的switch依然去不掉 ●解决方法:依赖注入.反射.XML 简单工厂模式 策略模式 收银软件的策 ...

  5. 一种思路:策略模式 + 反射工厂,很好的实现了开闭原则

    作者 | 麻辣你个王子 来源 | blog.csdn.net/qq_28675967/article/details/90581208 应用场景:某天接到了一个需求,品牌给了一个第三方接口,例如:ww ...

  6. 策略模式和工厂模式的区别

    文章目录 策略模式和工厂模式的区别 相似点 差异 用途不一样 关注点不一样 UML图 实例 策略模式和工厂模式的区别 相似点 在模式结构上,两者很相似: 差异 用途不一样 工厂是创建型模式,它的作用就 ...

  7. 策略模式和工厂模式在促销系统下的应用

    策略模式和工厂模式在促销系统下的应用 设计模式为我们提供了在某些应用场景下特定问题的解决方案,今天我们利用策略模式和工厂模式实现一个简单的促销系统. 实现语言:PHP 我们先来回顾一下策略模式和工厂模 ...

  8. java 策略模式和工厂模式区别_Java编程细节——什么是策略模式

    策略模式应该是Java设计模式中最简单的一种模式, 它的核心思想是,一个类的行为可以在运行时动态改变,有不同的实现逻辑. 其实具体的说,它也是基于面向接口编程的思想,通过定义不同的实现类逻辑来做到的. ...

  9. 创建型模式 简单工厂模式

    创建型模式 简单工厂模式 /*** 创建型模式 简单工厂模式* 简单工厂模式属于类的创建型模式,又叫做静态工厂方法模式.通过专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类.** ...

  10. 设计模式-策略模式和工厂模式结合使用

    怎么把策略模式和工厂模式结合起来使用 如果大家对策略模式和工厂模式不是很了解的话可以先看前面文章 策略模式:https://www.jianshu.com/p/958281936901 工厂模式:ht ...

最新文章

  1. Arduino初初教程10——温湿度传感器
  2. 4.帧循环(游戏主循环),schedule
  3. php源码无法安装mysql_linux中源码编译安装mysql常见错误
  4. 人人在谈的物联网,入门开发真难!
  5. ODP.NET 之 ExecuteNoQuery 执行 Merge into 返回值
  6. (转)对冲基金不信中国经济数据,转用卫星监控6000块工业用地
  7. C#接口编程实例解析[转]
  8. 40岁开始学习Android开发的我成了一名技术主管
  9. python 缺失值随机性检验_SPSS缺失值:缺失值分析
  10. 数据库设计需要注意什么?
  11. 基于Opencv的简单双摄像头图像实时拼接
  12. Kubeadm安装高可用的K8S集群--多master单node
  13. 软件设计原则和编码规范
  14. matlab实现从s域变成z域、matlab实现长除法逆z变换实例
  15. L2-021 点赞狂魔 - java
  16. 阿里云IOT物联网终端设备代码简介
  17. 计算机学院吉林大学夏令营,2020年吉林大学计算机科学与技术学院夏令营接收推免生条件...
  18. 维棠下载flv出错 kmplayer背黑锅
  19. JAVA451小轮好不好,20寸 406 451的通勤代步用途的小轮, 50/39T的齿比比较安逸, 大家觉得呢?...
  20. sourcetree安装及使用教程

热门文章

  1. mysql_connect报告“No such file or directory“错误的解决方法
  2. cookie,sessionStorage和localStorage的区别
  3. 《算法与数据结构专场》BitMap算法介绍
  4. C#回调函数的简单讲解与应用例子
  5. Hive中的一种假NULL
  6. ubuntu16.04 安装docker-ce,解决libltdl7版本过低的问题
  7. POJ-3352-RoadConstruction(边双联通分量,缩点)
  8. Open vSwitch介绍
  9. 转载:Windows核心编程---空指针赋值分区
  10. CMD安装/删除服务