`
chandler
  • 浏览: 79222 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

编程总结(二)

阅读更多

7. 不知道怎么命名这个思考。不过在现实中,也有这样的例子,一个人,要像两个主管汇报。一个类,属于两个体系。现在利用业余时间在写一个taobao的应用。其中有些具体的实现类,比方说DAO类,还有业务的实现类。不知道该放入业务的包下面还是Taobao的包下面。

     逻辑上的不清楚。基本思路的是有的。就是现在比较喜欢说的一句话。叫做需求和实现的分离。所以。现在采用的结果思路是。在具体业务类里。提供相应的接口,抽象或者工具类。而在Taobao包里实现具体操作。

 

8。昨天试着写用接口来梳理一个程序的逻辑。基本的结构是用最近比较喜欢的结构。一个接口。一个抽象的实现类。然后子类。起初写的时候,发觉很有问题。就是代码重复太多。比方说接口一个方法A。抽象类没有实现,然后在子类中实现。发觉这样做真的很麻烦。后来想到了模板模式。就利用了在虚拟类中实现了接口的方法,然后把一些每个子类不同的东西,一些方法用abstract方法交给子类实现。不过没有加final。

       在这里的想法的根本原因在于实现和需求的分离。因为子类在这里的作用只有实现功能。而不是满足需求。而接口的作用则是表示相关的需求。虚拟类在其中的作用就是做一个转接。你叫他封装。

 

9。这样的一个程序。把一个可以并行的运算,分成一个个运算单元。然后用多线程来处理。后来自己写测试类的时候。有点不知所错。因为发觉要验证很多方面。实现起来相当的困难。后来突发奇想的换了种思路,写了两个测试类。一个测试时验证负责预算单元的类是否正确。另一个则是验证了。真正的多线程的程序是否完整(运算结果数量是否一致)。

      如果提高一点。这是另一种功能专一化或者说解耦。两个类,一个是运算单元类,工作类。另一个类则是多线程的类,或者管理类。管理类没有必要去验证工作类的具体细节。

      不过就这个例子来说,有一个特点。就是利用了jdk的api来处理被运算的类,做到类似于池。同时,在运算过程中。没有共享资源。所以可以清晰的分清楚管理类和工作类。不过后来想想,如果有,其实问题也不大。可以用spring的aop来处理马。

 

10 BlockingQueue及其子类
     .最近写了一个多线程的程序。使用了BlockingQueue的几个实现类。其实用的Synchronous的实现类。因为我这个需求需要addall 也是同步的。但是,最后却是失败了。因为SynchronousQueue的同步,指的是获取和放入的同步。一个插入必须要等待下一个获取才能完成。 API中的解释是“其中每个插入操作必须等待另一个线程的对应移除操作”。而在我实际的使用中时。一旦调用put方法,就会发生阻塞。这才明白。原来SynchronousQueue其实是一个只有“一个元素”的队列。有两个线程A,B。A为生产者。把Item放入SyschronousQueue。然后由B从中取出。如果B没有取出item。则A线程会阻塞。
      ArrayBlockingQueue和LinkedBlockingQueue。这个两个看名字就知道区别所在了,不用多说。有两点说明。
     一。前者效率比后者高
     二。凡是其继承自BlockingQueue的方法,并自己实现都是同步。反之,则不同步,则不同步。具体可以看源代码吧。比如该说poll,add等,就不同步。但是poll(time,timeunit)则是同步。

11.关于设计。
       记得易中天说过一句话,凡事不要求最好,而要求最不差。其实设计中也是如此。最好的东西,往往投入也多。不能说不需要。性价比太低。

0
0
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics