GGYS

博客园 首页 新随笔 联系 订阅 管理
  122 随笔 :: 0 文章 :: 1 评论 :: 7994 阅读

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

优点: 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();




        }
    }

 

posted on   pengpeng077  阅读(3)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· 字符编码:从基础到乱码解决
· SpringCloud带你走进微服务的世界
点击右上角即可分享
微信分享提示