zoukankan      html  css  js  c++  java
  • 工厂模式中的泛型接口

    Java

    @@@code

    public interface DataBodyFormatter<T> {
        void Serialize(ByteBuf writer, T value, Version version);
        T Deserialize(ByteBuf reader,Version version);
    }

    public class DataBodyFormatterFactory {


    public DataBodyFormatterFactory() {
    }

    /**
    *
    系统内的formatters,自动注册
    */
    @Autowired
    Map<String, DataBodyFormatter> formatters;

    }

    public <D> DataBodyFormatter<D> getDataBodyFormatter(long code, boolean isReply) {

       

    }

    # 使用,默认就是object

    dataBodyFormatter = _DataBodyFactory.getDataBodyFormatter(code, isClientMode());

       

       

    @@#

       

    而在NET中

    @@@code

    public interface IDataBodyFormatterBase

    {

         object Deserialize(IByteBuffer reader, Version version);

    }

    public interface IDataBodyFormatter<T> : IDataBodyFormatterBase

    {

    void Serialize(IByteBuffer writer, T value, Version version);

    new T Deserialize(IByteBuffer reader, Version version);

    }

    # 使用一个基类

    public abstract class TDataBody<T> : DataBody, IDataBodyFormatter<T>

    {

    public abstract T Deserialize(IByteBuffer reader, Version version);

    public abstract void Serialize(IByteBuffer writer, T value, Version version);

       

    object IDataBodyFormatterBase.Deserialize(IByteBuffer reader, Version version)

    {

    return this.Deserialize(reader, version);

    }

    }

    public class DataBodyFormatterFactory : IDataBodyFormatterFactory

    {

       

    [Autowired()]

    public Dictionary<string, IDataBodyFormatterBase> FormatterDict { get; set; }

       

    //不允许的写法

    //public Dictionary<string, IDataBodyFormatter> FormatterDict2 { get; set; }

       

    public IDataBodyFormatterBase getDataBodyFormatter(int code, bool isReply = false)

    {

    }

    }

    # 使用

    dataBodyFormatter = _DataBodyFactory.getDataBodyFormatter(code, IsClientMode);

       

    @@#

  • 相关阅读:
    Memcached下载安装和使用
    PHP curl拓展的介绍和使用
    理解PHP面向对象三大特性
    empty()、isset()、is_null()的区别
    ThinkPHP无法打开或点击不了Trace的问题
    jQuery实现动态时间
    jQuery中$.get()和$.post()的异同点
    jQuery中attr()和prop()及removeAttr()和removeProp()的区别
    Windows10测试低版本IE方法
    apache 2.2 和 2.4 访问控制区别 (require 替代 deny)
  • 原文地址:https://www.cnblogs.com/QinQouShui/p/14310335.html
Copyright © 2011-2022 走看看