java设计模式--迭代器模式 Iterator,模板模式 Template,备忘录模式 Memento,中介者模式 Mediator
来源:互联网 发布:c罗欧洲杯数据 编辑:程序博客网 时间:2024/05/15 03:41
迭代器模式 Iterator
JDK 中集合类都有 iterator() 方法,此方法返回一个Iterator 接口的子类,不同的集合对Iterator实现不同。这样对于不同集合就统一定义了访问集合的方法。可以看看源码。
模板模式 Template
准备一个抽象类,将部分逻辑以具体方法以及具体构造函数的形式实现,然后声明一些抽象方法来迫使子类实现剩余的逻辑。不同的子类可以以不同的方式实现这些抽象方法,从而对剩余的逻辑有不同的实现。这就是模板方法模式的用意。
示例代码:
public abstract class Test {
public void foo(){
System.out.println("before");
//调用子类的实现
other();
System.out.println("after");
}
//抽象方法,由子类实现
abstract void other();
}
优点:模板方法模式通过把不变的行为搬移到超类,去除了子类中的重复代码。子类实现算法的某些细节,有助于算法的扩展。通过一个父类调用子类实现的操作,通过子类扩展增加新的行为,符合“开放-封闭原则”。
缺点:每个不同的实现都需要定义一个子类,这会导致类的个数的增加,设计更加抽象。
备忘录模式 Memento
备忘录(Memento)模式又称标记(Token)模式。在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样以后就可将该对象恢复到原先保存的状态。缺点是耗费大,如果内部状态很多,再保存一份,无意要浪费大量内存.
比如:在jsp 中有 scope="request"或 scope="session"特性,在进行验证时把表单的数据copy在相应scope 中,当验证不过时表单数据可以回填。
中介者模式 Mediator
用一个中介对象来封装一系列关于对象交互行为,用来降低类类之间的耦合。对象间的交互依赖彼此对方的行为,修改一个行为可能会涉及到很多其它对象的行为,通过Mediator 模式只关心对象和Mediator 的关系,这样就把多对多的关系修改成了一对多的关系。
代码模型:
class Mediator{
Class1 c1;
Class2 c2;
}
class Class1{
Mediator m;
}
class Class2{
Mediator m;
}
每个成员都必须知道 Mediator,并且和 Mediator 联系,而不是和其他成员联系。Class1 和 Class2 没有直接的关系,通过Mediator相关联。
MVC中的View Controller 是一种 Mediator,它是 Jsp 和服务器上应用程序间的 Mediator。
JDK 中集合类都有 iterator() 方法,此方法返回一个Iterator 接口的子类,不同的集合对Iterator实现不同。这样对于不同集合就统一定义了访问集合的方法。可以看看源码。
模板模式 Template
准备一个抽象类,将部分逻辑以具体方法以及具体构造函数的形式实现,然后声明一些抽象方法来迫使子类实现剩余的逻辑。不同的子类可以以不同的方式实现这些抽象方法,从而对剩余的逻辑有不同的实现。这就是模板方法模式的用意。
示例代码:
public abstract class Test {
public void foo(){
System.out.println("before");
//调用子类的实现
other();
System.out.println("after");
}
//抽象方法,由子类实现
abstract void other();
}
优点:模板方法模式通过把不变的行为搬移到超类,去除了子类中的重复代码。子类实现算法的某些细节,有助于算法的扩展。通过一个父类调用子类实现的操作,通过子类扩展增加新的行为,符合“开放-封闭原则”。
缺点:每个不同的实现都需要定义一个子类,这会导致类的个数的增加,设计更加抽象。
备忘录模式 Memento
备忘录(Memento)模式又称标记(Token)模式。在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样以后就可将该对象恢复到原先保存的状态。缺点是耗费大,如果内部状态很多,再保存一份,无意要浪费大量内存.
比如:在jsp 中有 scope="request"或 scope="session"特性,在进行验证时把表单的数据copy在相应scope 中,当验证不过时表单数据可以回填。
中介者模式 Mediator
用一个中介对象来封装一系列关于对象交互行为,用来降低类类之间的耦合。对象间的交互依赖彼此对方的行为,修改一个行为可能会涉及到很多其它对象的行为,通过Mediator 模式只关心对象和Mediator 的关系,这样就把多对多的关系修改成了一对多的关系。
代码模型:
class Mediator{
Class1 c1;
Class2 c2;
}
class Class1{
Mediator m;
}
class Class2{
Mediator m;
}
每个成员都必须知道 Mediator,并且和 Mediator 联系,而不是和其他成员联系。Class1 和 Class2 没有直接的关系,通过Mediator相关联。
MVC中的View Controller 是一种 Mediator,它是 Jsp 和服务器上应用程序间的 Mediator。
0 0
- java设计模式--迭代器模式 Iterator,模板模式 Template,备忘录模式 Memento,中介者模式 Mediator
- Java设计模式-----Mediator中介者模式
- Java设计模式-----Mediator中介者模式
- java设计模式--mediator 中介者模式
- C++设计模式之二十一--Mediator中介者模式、Interpreter解释器模式、Flyweight享元模式、Memento备忘录模式
- Mediator(中介者)设计模式
- 设计模式----Memento(备忘录)模式
- 设计模式--备忘录模式(Memento)
- [设计模式]memento备忘录模式
- [设计模式]备忘录模式(Memento)
- Java设计模式-----Memento备忘录模式
- Java设计模式-----Memento备忘录模式
- java设计模式十六--Memento(备忘录模式)
- java设计模式之备忘录模式Memento
- java设计模式-备忘录模式(Memento)
- JAVA设计模式—备忘录模式(Memento)
- Java设计模式十五:备忘录模式(Memento)
- java设计模式十六:--Memento(备忘录模式)
- 使用JvisualVM监控远程tomcat--jmx连接
- 正则表达式
- vs2010使用openCV中的imread读不到图片问题的解决方法
- 数据库学习
- flexSlider 图片轮播插件的使用(附参数设置)
- java设计模式--迭代器模式 Iterator,模板模式 Template,备忘录模式 Memento,中介者模式 Mediator
- mysql 数据类型 bigint tinyint
- 290. Word Pattern
- vi 操作
- 排序算法比较与C++实现
- 数值的整数次方
- 关于业务代码维护和团队成长的实践分享,挺有意思的一篇文章
- return false不能终止这个函数的执行de 解决办法
- struts中action实现ServletRequestAware接口,获得request的原因