发表于: 2018-10-14 14:20:11

1 430


今天完成的事情:(一定要写非常细致的内容,比如说学会了盒子模型,了解了Margin) 

一.继续学习turscany

CLIENT模块配置文件

composite文件 对一个componet定义

将SCAclient和serviceName对应法服务进行绑定

<component name="UserServiceComponent">
   <implementation.java class="com.ptteng.sca.pet.universal.client.UserSCAClient"/>

   <reference name="userService">
       <scallop:binding.rmi registryName="user-pet-universal-service-rmi" serviceName="UserRMIService"/>
   </reference>
</component>

spring配置文件中将composite中注册的component进行绑定

<!-- UserService  -->


<bean id="userService"
  class="com.gemantic.common.sca.service.SCAClientServiceFactory">
  <property name="client" ref="scaClient" />
  <property name="component" value="UserServiceComponent" />
  <property name="className"
     value="com.ptteng.pet.universal.service.UserService" />
</bean>

scallop的配置,暂时还没理解有什么用

scallop.registry.center = http://scallop.resource.center:8102

scallop.performace.rmi.processTimeThreshold=200

scallop.performace.rmi.showParameters=false

scallop.performace.rmi.executeTimesPrintInterval=600


二.迭代器iteator

http://www.runoob.com/design-pattern/iterator-pattern.html

迭代器模式

这种模式用于顺序访问集合对象的元素,不需要知道集合对象的底层表示。

介绍

意图:提供一种方法顺序访问一个聚合对象中各个元素, 而又无须暴露该对象的内部表示。

主要解决:不同的方式来遍历整个整合对象。

何时使用:遍历一个聚合对象。

如何解决:把在元素之间游走的责任交给迭代器,而不是聚合对象。

关键代码:定义接口:hasNext, next。

应用实例:JAVA 中的 iterator。

优点: 1、它支持以不同的方式遍历一个聚合对象。 2、迭代器简化了聚合类。 3、在同一个聚合上可以有多个遍历。 4、在迭代器模式中,增加新的聚合类和迭代器类都很方便,无须修改原有代码。

缺点:由于迭代器模式将存储数据和遍历数据的职责分离,增加新的聚合类需要对应增加新的迭代器类,类的个数成对增加,这在一定程度上增加了系统的复杂性。

使用场景: 1、访问一个聚合对象的内容而无须暴露它的内部表示。 2、需要为聚合对象提供多种遍历方式。 3、为遍历不同的聚合结构提供一个统一的接口。

注意事项:迭代器模式就是分离了集合对象的遍历行为,抽象出一个迭代器类来负责,这样既可以做到不暴露集合的内部结构,又可让外部代码透明地访问集合内部的数据。


一个demo

1.定义一个迭代器接口,包含两个基本方法

public interface MyIterator {
boolean hasNext();
   Object next();
}

2.定义一个容器接口包含迭代器接口

public interface Container {
MyIterator getIterator();
}

3.定义容器的实现类,并实现迭代器接口

public class NameRepository implements  Container{
String names[] ={"a","b","c","d"};
   @Override
   public MyIterator getIterator() {
        return new NameItorater();
   }

private class NameItorater implements MyIterator{
      int index;

      @Override
      public boolean hasNext() {
         if(index < names.length){
             return true;
          }
         return false;
      }

      @Override
      public Object next() {
           if(this.hasNext()){
            return names[index++];
          }
            return null;
      }
}
}

4.运行,通过迭代器取出容器中的元素

public static void main(String[] args) {
     NameRepository nameRepository = new NameRepository();
   for(MyIterator iterator = nameRepository.getIterator();iterator.hasNext();){
         String name = (String) iterator.next();
       System.out.println("name = " + name);
   }
}




三.对比java源码理解iterator

接口中定义了基础的两个方法

ps:java中的defult关键字可以在接口中定义方法

public interface Iterator<E> {

   boolean hasNext(); 
   E next();

   default void remove() {
     throw new UnsupportedOperationException("remove");
   }

   default void forEachRemaining(Consumer<? super E> action) {
     Objects.requireNonNull(action);
       while (hasNext())
    action.accept(next());
   }
}

java中还定义了一个iterable接口

接口中的包含了一个iterator接口用以实现迭代

public interface Iterable<T> {

   Iterator<T> iterator();

   default void forEach(Consumer<? super T> action) {
Objects.requireNonNull(action);
       for (T t : this) {
action.accept(t);
       }
}
   default Spliterator<T> spliterator() {
return Spliterators.spliteratorUnknownSize(iterator(), 0);
   }
}

定义collection接口继承iterable接口

set list等接口均继承collection接口

* @see     Set
* @see     List
* @see     Map
* @see     SortedSet
* @see     SortedMap
* @see     HashSet
* @see     TreeSet
* @see     ArrayList
* @see     LinkedList
* @see     Vector
* @see     Collections
* @see     Arrays
* @see     AbstractCollection
* @since 1.2
*/

public interface Collection<E> extends Iterable<E> {

明天继续


明天计划的事情:(一定要写非常细致的内容) 

今天断网,项目启动时报微信连接异常,明天试着把项目跑起来,然后自己写个demo

学习阅读arrylist源码


遇到的问题:(遇到什么困难,怎么解决的) 

项目中涉及了很多ptteng二方库jar包,本地环境 开发环境 测试环境下的配置需要变更,项目启动缓慢


收获:(通过今天的学习,学到了什么知识)

分布式学习 数据结构学习


返回列表 返回列表
评论

    分享到