• 目錄
  • 簡介
  • 收藏

    接口

    小說: 作者:我现在 字數:1007 更新時間:2019-11-22 02:43:44

    public class ImageCache {

    // 图片LRU缓存

    LruCachemImageCache;

    public ImageCache() {

    initImageCache();

    }

    private void initImageCache() {

    // 计算可使用的最大内存

    final int maxMemory = (int) (Runtime.getRuntime().maxMemory() / 1024);

    // 取四分之—的可用内存作为缓存

    final int cacheSize = maxMemory / 4;

    mImageCache = new LruCache(cacheSize) {

    @Override

    protected int sizeOf(String key, Bitmap bitmap) {

    return bitmap.getRowBytes() * bitmap.getHeight() / 1024;

    }

    };

    }

    public void put(String url, Bitmap bitmap) {

    mImageCache.put(url, bitmap) ;

    }

    public Bitmap get(String url) {

    return mImageCache.get(url) ;

    }

    }

    如图1-1和上述代码所示,小民将ImageLoader一拆为二,ImageLoader只负责图片加载的逻辑,而ImageCache只负责处理图片缓存的逻辑,这样ImageLoader的代码量变少了,职责也清晰了;当与缓存相关的逻辑需要改变时,不需要修改ImageLoader类,而图片加载的逻辑需要修改时也不会影响到缓存处理逻辑。主管在审核了小民的第一次重构之后,对小民的工作给予了表扬,大致意思是结构变得清晰了许多,但是可扩展性还是比较欠缺。虽然没有得到主管的完全肯定,但也是颇有进步,再考虑到自己确实有所收获,小民原本沮丧的心里也略微地好转起来。 从上述的例子中我们能够体会到,单一职责所表达出的用意就是“单一”二字。正如上文所说,如何划分一个类、一个函数的职责,每个人都有自己的看法,这需要根据个人经验、具体的业务逻辑而定。但是,它也有一些基本的指导原则,例如,两个完全不一样的功能就不应该放在一个类中。一个类中应该是一组相关性很高的函数、数据的封装。工程师可以不断地审视自己的代码,根据具体的业务、功能对类进行相应的拆分,这是程序员优化代码迈出的第一步了考虑考虑考虑考虑拒绝了。

    Email
    lovenovelapp@gmail.com
    Facebook主頁
    @Lovenovel
    Twitter
    @lovenovelapp