• 设计模式漫谈之访问者模式


    这是设计模式的最后一篇,最近事还是挺多,自己的东西还是没进步。其实我这个人不用和领导套近乎,我有自己的职业素养,工匠精神。我喜欢独处,喜欢自由,也喜欢女人,我订婚后也很幸福。

    今年我31周岁了,现在不是回想以前的时候,但是还是我应该努力的时候,不停的上进,坚持最后一定会成功!最怕傻逼式的坚持!

    朋友之间相处不要牵扯借钱的事,大钱不借,要么给。

    意思要守住原则,这样才能长久。

    面向过程语言开发时,有句话是算法+数据=程序。

    面向对象开发同样适用。算法等于对象引用的方法,数据等于对象中的属性字段。

    我其他设计模式中一直提,两个对象要能通信必须能找到对方的(内存)空间。

    访问者模式同样是这个道理:什么也不说,直接上例子,我来解释!

    //抽象的思路,

    abstract class Action
    {
    //依赖Man对象,即只在这个方法中才能访问到Man对象
    public abstract void GetManConclusion(Man concreteElementA);

    public abstract void GetWomanConclusion(Woman concreteElementB);
    }

    //具体的内存对象

    class Success : Action
    {
    public override void GetManConclusion(Man concreteElementA)
    {
    Console.WriteLine("{0}{1}时,背后多半有一个伟大的女人。", concreteElementA.GetType().Name, this.GetType().Name);
    }

    public override void GetWomanConclusion(Woman concreteElementB)
    {
    Console.WriteLine("{0}{1}时,背后大多有一个不成功的男人。", concreteElementB.GetType().Name, this.GetType().Name);
    }
    }

    //不同的状态(被访问者访问)

    class Failing : Action
    {
    public override void GetManConclusion(Man concreteElementA)
    {
    Console.WriteLine("{0}{1}时,闷头喝酒,谁也不用劝。", concreteElementA.GetType().Name, this.GetType().Name);
    }

    public override void GetWomanConclusion(Woman concreteElementB)
    {
    Console.WriteLine("{0}{1}时,眼泪汪汪,谁也劝不了。", concreteElementB.GetType().Name, this.GetType().Name);
    }
    }

    //抽象类
    abstract class Person
    {
    //在此方法中依赖访问者对象
    public abstract void Accept(Action visitor);
    }

    //具体实现

    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);
    }
    }
    }

    //初始化对象

    ObjectStructure o = new ObjectStructure();
    o.Attach(new Man());
    o.Attach(new Woman());

    //对象呗v1访问

    Success v1 = new Success();
    o.Display(v1);

    Failing v2 = new Failing();
    o.Display(v2);

    总结,访问者模式,就是对象被另一个对象访问。还是那句话,想被访问,必须公开自己的内存地址。

    到此,设计模式系列已写完。

    下个系列请期待。

    和最开始我说的一样,我最后写一个ORM,其实这个orm我已经写好了,但是由于诸多原因,目前这个orm只能是私人项目。

     我最开始说的所有功能,我都是完全自己实现的。里面的所有代码都是一行一行敲的。

    在此,我把最初的ado操作公布一下,作为一个抛砖引玉的开始。大家可以看看。

    github:https://github.com/WangCharle/Charle.kxs.git

    再牛逼的梦想也抵挡不住傻逼式的坚持,大家共勉之!
  • 相关阅读:
    RPC笔记之初探RPC:DIY简单RPC框架
    zookeeper笔记之基于zk实现分布式锁
    scala笔记之惰性赋值(lazy)
    Hive笔记之宏(macro)
    Zookeeper笔记之使用zk实现集群选主
    Zookeeper笔记之基于zk的分布式配置中心
    Zookeeper笔记之四字命令
    Zookeeper笔记之命令行操作
    复盘2018,展望2019
    爬虫笔记之w3cschool注册页面滑块验证码破解(巨简单滑块位置识别,非鼠标模拟轨迹)
  • 原文地址:https://www.cnblogs.com/wang-charle/p/9535465.html
Copyright © 2020-2023  润新知