策略模式、简单工厂结合
需求:使用加密狗进行软件保护,可能会使用不同的加密狗。
分析:加密狗
设计:使用策略模式,但由于策略模式需要使用人员了解哪个组件提供了软件保护服务,于是结合工厂模式对对象进行创建。由于可以使用的加密狗不会很多,所以采用了简单工厂模式。
这样,结构大体如下:工厂、功能抽象、功能实现、功能环境。
编码:
功能抽象:
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里没用包的概念,不能方便实现访问限制,没有只能名称空间级的访问限制,太不方便了,鄙视一下。