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.   策略       封装可互换的行为,并使用委托决定使用哪一个
     适配器     改变一个或多个类的接口
     迭代器     提供一个方式来遍历集合,而无须显露集合的实现 
     外观        简化一群类的接口
     组合       客户可以将对象的集合以及个别的对象一视同仁
     观察者    当某个状态改变时,允许一群对象能被通知到
 
 
     组合模式允许你将对象组成树形结构来表现“整体、部分”的层次结构。
     组合能让客户以一致的方式处理个别对象和对象组合。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值