访问者模式

简介: 访问者模式

定义:表示一个作用与某对象结构中的各元素的操作。它使你可以在不改变各元素的类的前提下定义作用与这些元素的新操作。


优点: 1、符合单一职责原则。 2、优秀的扩展性。 3、灵活性。


缺点: 1、具体元素对访问者公布细节,违反了迪米特原则。 2、具体元素变更比较困难。 3、违反了依赖倒置原则,依赖了具体类,没有依赖抽象。

abstract class Action
    {
        //得到男人结论或反应
        public abstract void GetManConclusion(Man concreteElementA);
        //得到女人结论或反应
        public abstract void GetWomanConclueion(Woman concreteElementB);
    }
 abstract class Person
    {
        public abstract void Accept(Action visitor);
    }
class Success:Action
    {
        public override void GetManConclusion(Man concreteElementA)
        {
            Console.WriteLine("{0}{1}时,背后多半有一个伟大的女人",concreteElementA.GetType().Name,this.GetType().Name);
        }
        public override void GetWomanConclueion(Woman concreteElementB)
        {
            Console.WriteLine("{0}{1}时,背后多半有一个不成功的男人", concreteElementB.GetType().Name, this.GetType().Name);
        }
    }
 //男人
    class Man:Person
    {
        public override void Accept(Action visitor)
        {
            visitor.GetManConclusion(this);//根据状态得到反应或结论
        }
    }

女人代码同上

//对象结构
    class ObjectStructure
    {
        private IList<Person> elements = new List<Person>();
        //增加
        public void Attach(Person element)
        {
            elements.Add(element);
        }
        //移除
        public void Detach(Person element)
        {
            elements.Remove(element);
        }
        //查看显示
        public void Display(Action visitor)
        {
            foreach (Person e in elements)
            {
                e.Accept(visitor);
            }
        }
 class Program
    {
        static void Main(string[] args)
        {
            ObjectStructure o = new ObjectStructure();
            o.Attach(new Man());
            o.Attach(new Woman());
            Success v1 = new Success();
            o.Display(v1);
            Failing v2 = new Failing();
            o.Display(v2);
            Amativeness v3 = new Amativeness();
            o.Display(v3);
            Console.Read();
        }
    }
相关文章
|
3月前
|
设计模式 Java 容器
聊聊Java设计模式-访问者模式
访问者模式(Visitor Pattern)指将作用域某种数据结构中的各元素的操作分离出来封装成独立的类,使其在不改变数据结构的前提下可以添加作用于这些元素的新的操作。
38 3
|
9月前
访问者模式
访问者模式
44 0
访问者模式
|
3月前
|
算法
行为型 访问者模式
行为型 访问者模式
24 0
|
12月前
|
设计模式 Java uml
|
设计模式 Java 关系型数据库
访问者模式解读
访问者模式解读
今天说说你不知道的访问者模式
今天说说你不知道的访问者模式
66 0
|
设计模式 程序员
访问者模式是啥?咋实现呀?
访问者模式是啥?咋实现呀?
|
设计模式
我学会了,访问者模式
访问者模式属于行为型模式,这个类型的设计模式总结出了 类、对象之间的经典交互方式,将类、对象的行为和使用解耦了,花式的去使用对象的行为来完成特定场景下的功能。
100 0
我学会了,访问者模式
|
设计模式 XML Java
java设计模式之访问者模式
写这篇文章之前,我也看了十几篇网络大牛写的访问者设计模式的文章,都说这个访问者模式是最复杂的一个,但是我觉得跟其他的设计模式并没有太多的不同,因此自己整理了一下,相信大多数人都能看懂。
151 0
java设计模式之访问者模式
|
设计模式 Java Spring
Java设计模式 ->访问者模式
Java设计模式 ->访问者模式
90 0