zoukankan      html  css  js  c++  java
  • 策略模式、简单工厂结合

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

    分析:加密狗

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

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

    编码:

    功能抽象:

    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里没用包的概念,不能方便实现访问限制,没有只能名称空间级的访问限制,太不方便了,鄙视一下。

  • 相关阅读:
    css 深入理解
    2018 web经典面试题
    CSS 居中布局
    HTTP首部解析
    http状态码有那些?分别代表是什么意思?
    基本HTTP协议流程是什么?
    JS-变量
    javascript基础1
    css3弹性盒模型(Flexbox)
    文字效果和颜色
  • 原文地址:https://www.cnblogs.com/javaleon/p/3740553.html
Copyright © 2011-2022 走看看