`
chriszeng87
  • 浏览: 716158 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

HeadFirst 设计模式 读书笔记 (二)

阅读更多
1. 外观模式
      "最少知识原则"
          就任何对象而言,在该对象的方法内,我们只应该调用属于以下范围的方法:
     .该对象本身
     .被当做方法的参数而传递进来的对象
     .此方法所创建或实例化的任何对象
    .对象的任何组件
 
     外观模式提供了一个统一的接口,用来访问子系统的一群接口。外观定义了一个高层接口,让子系统更容易使用。
 
2. 模板方法
     模板方法定义了一个算法的步骤,并允许子类为一个或多个步骤提供实现。
 
       模板方法     子类决定如何实现算法中的步骤
       策略            封装可互换的行为,然后用委托来决定要采用要一个行为
       工厂方法     由子类决定实例化哪个具体类
 
     模板方法模式   在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以在不改变
算法结构的情况下,重新定义算法中的某些步骤。
     
     策略模式和模板方法模式都封装算法,一个用组合,一个用继承。
 
     工厂方法是模式方法的特殊版本?

3. 迭代器模式
     
     public class PancakeHouseIterator implements Iterator{
          ArrayList menuItems;
          int position = 0;
          
          public PancakeHouseIterator(ArrayList menuItems) {
               this.menuItems = menuItems;
          }
          
          public Object next() {
               MenuItem menuItem = menuItems.get(position);
               position ++;
               return menuItem;
          }
 
          public boolean hasNext() {
               if (position > menuItems.size()) {
                    return false;
               } else {
                    return true;
               }
          }
          
     }
 
 
      public class PancakeHouseMenu {
          ArrayList items;
          
          public Iterator createIterator() {
               return new PancakeHouseMenuIterator(items);
          }
     }
 
 
P350  
public class AlternatingDinerMenuIterator implements Iterator {
     MenuItem[] items;
     int position;
 
      public AlternatingDinerMenuIterator(MenuItem[] items) {
          this.items = items;
          Calendar rightNow = Calendar.getInstance();
          positon = rightNow.get(calendar.DAY_OF_WEEK) %2;
     } 
 
     public Object next() {
          MenuItem menuItem = items[positon];
          position = position + 2;
          return menuItem;
      }
          
      public boolean hasNext() {
           if (position >= items.length || items[position] == null) {
               return false;
          }   else {
               return true;
          } 
     }
 
     public void remove() {
          throw new UnsupportedOperationException(
               "Alternating Diner Menu Iterator does not support remove()");
     }
 
}
 
 
 
一个类应该是单一责任的,即一个类应该只有一个引起变化的原因
 
4.   策略       封装可互换的行为,并使用委托决定使用哪一个
     适配器     改变一个或多个类的接口
     迭代器     提供一个方式来遍历集合,而无须显露集合的实现 
     外观        简化一群类的接口
     组合       客户可以将对象的集合以及个别的对象一视同仁
     观察者    当某个状态改变时,允许一群对象能被通知到
 
 
     组合模式允许你将对象组成树形结构来表现“整体、部分”的层次结构。
     组合能让客户以一致的方式处理个别对象和对象组合。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics