• 访问者模式——HeadFirst设计模式学习笔记


    访问者模式:为某个对象组合添加新功能,而又不改变组合的内部结构

    • Visitor抽象访问者角色,为该对象结构中具体元素角色声明一个访问操作接口
    • ConcreteVisitor具体访问者角色,实现Visitor声明的接口
    • Element定义一个接受访问操作(accept()),它以一个访问者(Visitor)作为参数
    • ConcreteElement具体元素,实现了抽象元素(Element)所定义的接受操作接口
    • ObjectStructure结构对象角色,这是使用访问者模式必备的角色。它具备以下特性:能枚举它的元素;可以提供一个高层接口以允许访问者访问它的元素

    特点:

    • 元素类可以通过接受不同的访问者来实现对不同操作的扩展
    • 将和本对象相关性较低的操作封装到访问者中,对访问者对对象组合都符合单一职责原则
    • 适用于变化性较低的对象组合

    举例:

     1 abstract class Element {  
     2     public abstract void accept(IVisitor visitor);  
     3     public abstract void doSomething();  
     4 }  
     5   
     6 interface IVisitor {  
     7     public void visit(Element e);  
     8 }  
     9   
    10 class ConcreteElement extends Element {  
    11     public void doSomething(){  
    12         System.out.println("这是元素");  
    13     }  
    14       
    15     public void accept(IVisitor visitor) {  
    16         visitor.visit(this);  
    17     }  
    18 }  
    19 
    20 class Visitor implements IVisitor {  
    21   
    22     public void visit(Element e) {  
    23         e.doSomething();  
    24     }  
    25 }  
    26   
    27 
    28 public class Client {  
    29     public static void main(String[] args){  
    30         List<Element> list = ObjectStruture.getList();  
    31         for(Element e: list){  
    32             e.accept(new Visitor());  
    33         }  
    34     }  
    35 } 
  • 相关阅读:
    Java突击学习 Day2 Part1
    Java突击学习 Day1
    SQL Server笔试准备 Day2
    SQL Server笔试准备 Day1
    .NET/C# 各版本变化及衍生知识点 C# 6.0
    .NET/C# 各版本变化及衍生知识点 C# 3.0/4.0/5.0
    .NET理论知识 笔试准备 Day3
    CSS---!important
    CSS---弹性布局
    HTML--meta标签
  • 原文地址:https://www.cnblogs.com/HectorHou/p/6049353.html
Copyright © 2020-2023  润新知