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。
0 0
原创粉丝点击