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

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

今年我31周岁了,如今不是回想之前的时候,可是仍是我应该努力的时候,不停的上进,坚持最后必定会成功!最怕傻逼式的坚持!github

 

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

 

意思要守住原则,这样才能长久。设计模式

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

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

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

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

//抽象的思路,orm

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再牛逼的梦想也抵挡不住傻逼式的坚持,你们共勉之!
相关文章
相关标签/搜索