欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2024-01-20 16:26:28
这是设计模式的最后一篇,最近事还是挺多,自己的东西还是没进步。其实我这个人不用和领导套近乎,我有自己的职业素养,工匠精神。我喜欢独处,喜欢*,也喜欢女人,我订婚后也很幸福。 今年我31周岁了,现在不是回想以前的时候,但是还是我应该努力的时候,不停的上进,坚持最后一定会成功!最怕傻逼式的坚持! 朋友 ......

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

今年我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

再牛逼的梦想也抵挡不住傻逼式的坚持,大家共勉之!