【设计模式】16-20:状态模式、适配器模式、备忘录模式、组合模式、迭代器模式

十六、状态模式

状态模式(State Pattern)中,类的行为是基于它的状态改变的

创建表示各种状态的对象和一个行为随着状态对象改变而改变的 context 对象。

通过状态改变行为

public class StatePatternDemo {
   public static void main(String[] args) {
      Context context = new Context();
 
      StartState startState = new StartState();
      startState.doAction(context);
 
      System.out.println(context.getState().toString());
 
      StopState stopState = new StopState();
      stopState.doAction(context);
 
      System.out.println(context.getState().toString());
   }
}

使用 Context 来查看当状态 State 改变时的行为变化。

十七、适配器模式

使得原本由于接口不兼容而不能一起工作的那些类可以一起工作

将一些"现存的对象"放到新的环境中,而新环境要求的接口是现对象不能满足的

借助适配器,当前设备无法播放,利用适配器调用高级设备

【设计模式】16-20:状态模式、适配器模式、备忘录模式、组合模式、迭代器模式

public class MediaAdapter implements MediaPlayer {
 
   AdvancedMediaPlayer advancedMusicPlayer;
 
   public MediaAdapter(String audioType){
      if(audioType.equalsIgnoreCase("vlc") ){
         advancedMusicPlayer = new VlcPlayer();       
      } else if (audioType.equalsIgnoreCase("mp4")){
         advancedMusicPlayer = new Mp4Player();
      }  
   }
 
   @Override
   public void play(String audioType, String fileName) {
      if(audioType.equalsIgnoreCase("vlc")){
         advancedMusicPlayer.playVlc(fileName);
      }else if(audioType.equalsIgnoreCase("mp4")){
         advancedMusicPlayer.playMp4(fileName);
      }
   }
}

十八、备忘录模式

在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。

备忘录模式使用三个类 Memento、Originator 和 CareTaker。

【设计模式】16-20:状态模式、适配器模式、备忘录模式、组合模式、迭代器模式

 Memento 包含了要被恢复的对象的状态。Originator 创建并在 Memento 对象中存储状态。Caretaker 对象负责从 Memento 中恢复对象的状态。

public class CareTaker {
   private List<Memento> mementoList = new ArrayList<Memento>();
 
   public void add(Memento state){
      mementoList.add(state);
   }
 
   public Memento get(int index){
      return mementoList.get(index);
   }
}

十九、组合模式

讲对象组合成树形结构

把一组相似的对象当作一个单一的对象。组合模式依据树形结构来组合对象,用来表示部分以及整体层次。

例如:员工上下级模板类

【设计模式】16-20:状态模式、适配器模式、备忘录模式、组合模式、迭代器模式

二十、迭代器模式

是 Java 和 .Net 编程环境中非常常用的设计模式。这种模式用于顺序访问集合对象的元素

不暴露对象的内部表示

【设计模式】16-20:状态模式、适配器模式、备忘录模式、组合模式、迭代器模式

NameRepository implements Container

上一篇:32、Flutter之自定义路由切换动画


下一篇:SpringWebMvc JNDI数据源配置