这是设计模式的最后一篇,最近事还是挺多,自己的东西还是没进步。其实我这个人不用和领导套近乎,我有自己的职业素养,工匠精神。我喜欢独处,喜欢自由,也喜欢女人,我订婚后也很幸福。
今年我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 再牛逼的梦想也抵挡不住傻逼式的坚持,大家共勉之!