面向对象的六大原则解析
来源:互联网 发布:mysql区分大小写查询 编辑:程序博客网 时间:2024/05/23 01:12
单一职责原则(优化代码的第一步)
- 描述:大致说就是代码各个类之间职责分明,只做自己应该做的事情,当自己发生改变时能够不影响其他的类。
所有的不想关的功能不应该都在同一个类中的完成,不然最后导致一个类中有很多的代码,也不利于阅读。
一个优秀的程序员能够不断的优化自己的代码让它更具设计美感。 - 例子:如写一个下载图片和缓存的功能
public class ImageLoader {
//图片缓存public LruCache<String, Bitmap> bitmapLruCache;//线程池 线程数量为cup数量ExecutorService executorService = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors());public ImageLoader() { initCache();}/*** * 图片缓存 */public void initCache() { int maxMemory = (int) (Runtime.getRuntime().maxMemory() / 1024); int cacheSize = maxMemory / 4; //用于缓存图片 bitmapLruCache = new LruCache<String, Bitmap>(cacheSize) { @Override protected int sizeOf(String key, Bitmap value) { return value.getRowBytes() * value.getHeight() / 1024; //一张图片占据的内存 } };}/** * 换成图片 * * @param url * @param imageView */public void displayImage(final String url, final ImageView imageView) { imageView.setTag(url); executorService.submit(new Runnable() { @Override public void run() { Bitmap bitmap = downloadImage(url); imageView.setImageBitmap(bitmap); //缓存 bitmapLruCache.put(url, bitmap); } });}/** * 图片下载下来 * * @param url */private Bitmap downloadImage(String url) { Bitmap bitmap = null; try { URL url1 = new URL(url); HttpURLConnection httpURLConnection = (HttpURLConnection) url1.openConnection(); bitmap = BitmapFactory.decodeStream(httpURLConnection.getInputStream()); } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return bitmap; } }
这样的功能就写在一个类中当其中一个方法中的代码改变时其它的也要跟着改变,所以我们要让代码更加的 灵活更具扩展: 可以把缓存功能和下载显示功能分开来写。 ![修改后的UML图](http://note.youdao.com/favicon.ico) ```
public class ImageCache { //图片缓存 public LruCache开闭原则(让程序刚稳定,更灵活)
里氏替换原则(构建扩展性更好的系统)
依赖倒置原则()
接口隔离原则
迪米特原则
阅读全文
0 0
- 面向对象的六大原则解析
- 面向对象六大原则解析
- 面向对象的六大原则
- 面向对象的六大原则
- 面向对象的六大原则
- 面向对象的六大原则
- 面向对象的六大原则
- 面向对象的六大原则
- 面向对象的六大原则
- 面向对象的六大原则
- 面向对象的六大原则
- 面向对象的六大原则
- 面向对象的六大原则
- 面向对象的六大原则
- 面向对象的六大原则
- 面向对象的六大原则
- 面向对象的六大原则
- 面向对象的六大原则
- Android 反编译 -smali语法
- 网络安全重点总结1
- TCP简单的通信
- angular2封装组件(一)——引用js包
- javascript中json、回调函数、匿名函数的一些测试
- 面向对象的六大原则解析
- cout.precision()的使用
- leetcode 357. Count Numbers with Unique Digits
- Fzu 2200 cleaning【环状Dp-----暴力枚举拆环】
- 最小二乘法
- 响铃:内容越发重要的时代,开放共享要成为智能电视的新玩法?
- echarts bar内tooltip的formatter回调参数params.seriesId中的’\0’问题以及stack的获取
- hdu1159 最长公共子序列 LCS
- 类型“Microsoft.VisualStudio.Tools.Office.Ribbon.View.GenericRibbonView”没有名为“Factory”的属性。