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

设计模式-行为型模式总结实例(一)

 
阅读更多

迭代器模式

提供一个方法顺序访问一个聚合对象的各个元素,而又不需要暴露该对象的内部表示。

package com.ruishenh.designPatter.action.iterator;
 
import java.util.ArrayList;
import java.util.List;
 
public class IteratorClient {
   public static void main(String[] args) {
      ICollection<Module> list=new Collection<Module>();
      list.add(new  Module(1,"h1"));
      list.add(new  Module(2,"h2"));
      list.add(new  Module(3,"h3"));
      Iterator<Module> moduls=list.iterator();
      while(moduls.hasNext()){
        Module m=moduls.next();
        System.out.println(m.toString());
      }
     
   }
}
 
//迭代器
interface Iterator<T>{
  
   boolean hasNext();
  
   T next();
}
//组合器
interface IAssembler<T>{
  
   boolean add(T t);
  
   boolean remove(T t);
  
}
//容器角色
interface ICollection<T> extends IAssembler<T>{
   Iterator<T>  iterator();
}
//具体容器角色
class Collection<T> implements ICollection<T>{
  
   private List<T> list;
  
   @Override
   public Iterator<T> iterator() {
      return new ContretelIterator<T>(this.list);
   }
   @Override
   public boolean add(T t) {
      if (list==null) {
        list=new ArrayList<T>();
      }
      return list.add(t);
   }
 
   @Override
   public boolean remove(T t) {
      return list.remove(t);
   }
  
}
//具体迭代器角色
class ContretelIterator<T> implements Iterator<T>{
  
   private transient List<T> list;
  
   public ContretelIterator(List<T> list){
      this.list=list;
   }
    
   int cursor = 0;
  
   @Override
   public boolean hasNext() {
      return cursor!=list.size();
   }
 
   @Override
   public T next() {
      return list.get(cursor++);
   }
}
class Module{
   public Module(int id,String name){this.id=id;this.name=name;}
   int id;
   String name;
   public int getId() {
      return id;
   }
   public void setId(int id) {
      this.id = id;
   }
   public String getName() {
      return name;
   }
   public void setName(String name) {
      this.name = name;
   }
   @Override
   public String toString() {
      return "id:"+id+",name:"+name;
   }
  
}


迭代器模式核心任务把数据实体的操作和生成分离开来,容器负责产生对应的数据,迭代器负责把集合返回用户来一个个操作。

观察者模式

定义对象间一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知自动更新。

package com.ruishenh.designPatter.action.observer;
 
import java.util.ArrayList;
import java.util.List;
 
 
public class ObserverClient {
   public static void main(String[] args) {
      //初始化容器,安装核心程序
      Container<IDependent<ICore>,ICore> container=new Container<IDependent<ICore>, ICore>(new Wash());
     
      //容器注册设备1
      App1 a1=new App1();
      container.add(a1);
     
      //容器注册设备1
      App2 a2=new App2();
      container.add(a2);
      //设备工作
      a1.function();
      a2.function();
     
      //更新核心程序
      container.upgrade(new Clear());
     
      //设备工作
      a1.function();
      a2.function();
 
   }
 
}
//约定更新接口
interface IDependent<E>{
   void update(E e,String msg);
   void setCore(E e,String msg);
}
//核心包功能包
interface ICore{
   void function();
}
class Wash implements ICore{
   @Override
   public void function() {
      System.out.println("洗衣服......");
   }
}
class Clear implements ICore{
   @Override
   public void function() {
      System.out.println("清除垃圾......");
   }
}
 
//管理注册容器
class Container<T extends IDependent<E>, E>{
  
   public Container(E e){
      this.core=e;
      System.out.println("初始化核心程序....");
   }
   E core;
   List<T> list;
   String msg="更新了最新程序,由1.0更新到1.1";
  
   void upgrade(E core){
      this.core=core;
      notfiy();
   }
   void add(T t){
      if(list==null)list=new ArrayList<T>();
      list.add(t);
      t.setCore(core, "初始化程序,当期程序1.0版本");
   }
   void remove(T t){
      if(list==null)return;
      list.remove(t);
   }
   void notfiy(){
      for (T t:list) {
        t.update(core,msg);
      }
   }
}
class App1 implements IDependent<ICore>{
  
   ICore core;
 
   @Override
   public void setCore(ICore e, String msg) {
      this.core=e;
      System.out.print("我是App1程序:");
      System.out.println(msg);
     
   }
   @Override
   public void update(ICore e,String msg) {
      System.out.print("我是App1程序:");
      System.out.println(msg);
      this.core=e;
   }
   void function(){core.function();}
}
class App2 implements IDependent<ICore>{
   ICore core;
  
   @Override
   public void setCore(ICore e, String msg) {
      this.core=e;
      System.out.print("我是App2程序:");
      System.out.println(msg);
     
   }
   @Override
   public void update(ICore e,String msg) {
      System.out.print("我是App2程序:");
      System.out.println(msg);
      this.core=e;
   }
   void function(){core.function();}
  
}


观察者模式的核心任务个人理解是主要是对依赖主题的变更提高更好地维护性。

当被依赖的东西发生了改变,依赖它的其他对象能及时的更新变更

模板方法

定义一个操作中的算法的骨架,而将一些步骤延迟到子类中,TemplateMethod使得子类可以不改变一个算法的结构即可以重定义该算法得某些特定步骤。


package com.ruishenh.designPatter.action.templateMethod;
 
public class TemplateMethodClient {
   public static void main(String[] args) {
      Shop shop = new IceCreamShop();
      shop.buy();
   }
}
 
abstract class Shop {
   // 买东西
   void buy() {
 
      pay();
 
      take();
 
   }
 
   public abstract void pay();
 
   public abstract void take();
}
 
class IceCreamShop extends Shop {
 
   @Override
   public void pay() {
      System.out.println("付冰激凌的钱");
   }
 
   @Override
   public void take() {
      System.out.println("服务员给了我冰激凌");
   }
 
}

模板方法的核心就是把要做的一件事的框架给定好了,有些具体操作留给它的子类去完成。

分享到:
评论

相关推荐

    c++设计模式-行为型模式-解释器模式

    c++设计模式-行为型模式-解释器模式;qt工程;c++简单源码; 解释器(Interpreter)模式的定义:给分析对象定义一个语言,并定义该语言的文法表示,再设计一个解析器来解释语言中的句子。也就是说,用编译语言的方式...

    设计模式课件大全

    设计模式11-行为模式-责任链、命令模式 设计模式12-解释器模式 设计模式13-迭代器模式 设计模式14-中介者模式、备忘录模式 设计模式15-观察者模式、状态模式 设计模式16-策略模式、模板方法、访问者 此PPT实例便于...

    设计模式--C++

    1.1 什么是设计模式 2 1.2 Smalltalk MVC 中的设计模式 3 1.3 描述设计模式 4 1.4 设计模式的编目 5 1.5 组织编目 7 1.6 设计模式怎样解决设计问题 8 1.6.1 寻找合适的对象 8 1.6.2 决定对象的粒度 9 1.6.3 指定对象...

    行为型模式+结构型模式+创建型模式:三大设计模式实例剖析与深入解读

    行为型模式+结构型模式+创建型模式:三大设计模式实例剖析与深入解读 行为型模式 备忘录模式 +结构型模式 创建型模式总结 +创建型模式

    23种设计模式实例

    总体来说设计模式分为三大类: 创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元...

    设计模式--可复用面向对象软件的基础

    1.2 Smalltalk MVC中的设计模式 1.3 描述设计模式 1.4 设计模式的编目 1.5 组织编目 1.6 设计模式怎样解决设计问题 1.7 怎样选择设计模式 1.8 怎样使用设计模式 第二章 实例研究:设计一个文档编辑器 2.1 设计问题...

    论文研究-源代码中设计模式实例的抽取及验证方法研究.pdf

    具体地, 研究了源码中设计模式抽取的静态结构分析过程, 为了进一步提高设计模式实例抽取的准确率, 对结构分析得到的创建型模式候选, 使用创建对象的多重性分析方法进行验证, 对结构分析得到的行为型模式候选, 使用...

    软件设计模式-java.pdf

    全书共9章,内容包括设计模式基础、创建型设计模式(共5种)、结构型设计模式(共7种)、行为型设计模式(共11种)、设计模式实验指导。每章包括教学目标、重点内容、模式的定义与特点、模式的结构与实现、模式的...

    23种设计模式经典案例(C++版)

    设计模式是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代 码可靠性。 毫无疑问,设计模式于己于他人于系统都是多赢的;设计...

    设计模式(包含原版)

    内容简介:本书设计实例从面向对象的设计中精选出23个设计模式,总结了面向对象设计中最有价值的经验,并且用简洁可复用的形式表达出来。 本书分类描述了一组设计良好,表达清楚的软件设计模式,这些模式在实用环境...

    C#设计模式—适配器模式应用实例

    C#设计模式之适配器模式应用实例

    23种设计模式项目实例

    创建型模式,共五种:工厂方法模式、抽象工厂模式、...行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。

    设计模式可复用面向对象软件的基础.zip

    本书设计实例从面向对象的设计中精选出23个设计模式,总结了面向对象设计中最有价值的经验,并且用简洁可复用的形式表达出来。本书分类描述了一组设计良好,表达清楚的软件设计模式,这些模式在实用环境下有特别有用...

    JAVA的23种设计模式实例

    JAVA的23种设计模式实例,如三大类创建型模式、结构型模式、行为型模式,细分为23种具体模式1. 设计模式 3 1.1 创建型模式 4 1.1.1 工厂方法 4 1.1.2 抽象工厂 6 1.1.3 建造者模式 10 1.1.4 单态模式 13 1.1.5 原型...

    设计模式:可复用面向对象软件的基础--详细书签版

     本书结合设计实例从面向对象的设计中精选出23个设计模式,总结了面向对象设计中最有价值的经验,并且用简洁可复用的形式表达出来。本书分类描述了一组设计良好、表达清楚的软件设计模式,这些模式在实用环境下特别...

    c++设计模式全系列+应用场景+实例说明

    2. **单例模式(Singleton Pattern)**:单例模式是一种创建型设计模式,确保一个类只有一个实例,并提供一个全局访问点。 3. **观察者模式(Observer Pattern)**:观察者模式是一种行为设计模式,定义了对象间的...

    《设计模式》中文版(23个设计模式的介绍与运用)

    1.1 什么是设计模式 2 1.2 Smalltalk MVC中的设计模式 3 1.3 描述设计模式 4 1.4 设计模式的编目 5 1.5 组织编目 7 1.6 设计模式怎样解决设计问题 8 1.6.1 寻找合适的对象 8 1.6.2 决定对象的粒度 9 1.6.3 指定对象...

    设计模式完整版.rar

    内容简介:本书设计实例从面向对象的设计中精选出23个设计模式,总结了面向对象设计中最有价值的经验,并且用简洁可复用的形式表达出来。本书分类描述了一组设计良好,表达清楚的软件设计模式,这些模式在实用环境下...

    设计模式代码和报告

    2. 使学生了解23种设计模式,归纳总结创建型模式、行为型模式和结构型模式的应用情景、所需角色。并根据分类各举一例详细说明要析 3. 使学生掌握如何使用面向对象的方法,采用设计模式设计可扩展、高可重用的软件。 ...

    设计模式可复用面向对象软件的基础

    内容简介:本书设计实例从面向对象的设计中精选出23个设计模式,总结了面向对象设计中最有价值的经验,并且用简洁可复用的形式表达出来。本书分类描述了一组设计良好,表达清楚的软件设计模式,这些模式在实用环境下...

Global site tag (gtag.js) - Google Analytics