`

大话设计模式二十八:访问者模式(男人和女人)

 
阅读更多

访问者模式:

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

// 人的抽象类
public abstract class Person {
	
	// 接受一个'访问者'为参数
	public abstract void accept(Action visitor);
}

// 男人
public class Man extends Person {

	@Override
	public void accept(Action visitor) {
		visitor.getManReflection(this);
	}

}

// 女人
public class Woman extends Person {

	@Override
	public void accept(Action visitor) {
		visitor.getWomanReaction(this);
	}

}

// 状态的抽象类
public abstract class Action {
	
	// 获取男人的反应
	public abstract void getManReflection(Man m);
	
	// 获取女人的反应
	public abstract void getWomanReaction(Woman w);
}

// 成功
public class Success extends Action {

	@Override
	public void getManReflection(Man m) {
		System.out.println("When a man successed , there will be a great women behind him! ");
	}

	@Override
	public void getWomanReaction(Woman w) {
		System.out.println("When a woman successed , there will be a bad man behind him! ");
	}

}

// 失败
public class Fail extends Action {

	@Override
	public void getManReflection(Man m) {
		System.out.println("When a man failed , they will be driken ");
	}

	@Override
	public void getWomanReaction(Woman w) {
		System.out.println("When a woman failed , they will crying! ");
	}

}

public class ObjectStructure {

	private List<Person> elements = new ArrayList<Person>();
	
	// 移除
	public void detach(Person p) {
		elements.remove(p);
	}
	
	// 增加
	public void attach(Person p) {
		elements.add(p);
	}
	
	// 显示
	public void display(Action visitor) {
		for (Person p : elements) {
			p.accept(visitor);
		}
	}
}

// 客户端
public class VisitorMain {

	public static void main(String[] args) {
		ObjectStructure os = new ObjectStructure();
		Person man = new Man();
		Person woman = new Woman();

		os.attach(man);
		os.attach(woman);

		Success v = new Success();
		os.display(v);

		Fail f = new Fail();
		os.display(f);
	}

}

访问者模式的优点:

增加新的操作很容易,因为增加一个新的操作意味着增加一个新的访问者,但如果数据结构对象易于变化,经常有新的数据对象增加进来,就不适合使用访问者模式。

分享到:
评论

相关推荐

    【资源免费下载】Java代码积累丨大话设计模式(Java实现版本)、线程协作

    设计模式参考《大话设计模式》 工厂简单模式 创造型模式 工厂方法模式 抽象工厂模式 原型模式 建造者模式 单例模式 结构型模式 队列模式 桥接模式 组合模式 装饰模式 外观模式 享元模式 代理模式 行为模式(类行为...

    大话模式源代码示例

    以上只是设计模式中的一部分,"大话模式源代码示例"涵盖的28个实例将覆盖更多的模式,如命令模式、职责链模式、状态模式、访问者模式等。通过这些源代码,我们可以深入理解每个模式的工作原理,学习如何在实际项目中...

    设计模式--大话设计

    26种设计模式还包括其他如建造者模式、组合模式、享元模式、命令模式、模板方法模式、迭代器模式、访问者模式、备忘录模式、状态模式、解释器模式等,它们都有各自独特的作用和应用场景。掌握这些设计模式能够帮助...

    大话设计模式总结.doc

    设计模式总结 设计模式是软件设计中的一种解决方案,旨在解决软件设计中的一些...这些设计模式和原则是软件设计中的一些基本概念和解决方案,遵循这些原则和模式可以帮助我们设计更加灵活、可维护、可扩展的软件系统。

    java 设计模式 一个txt 一个pdf

    Java设计模式是软件开发中的重要概念,它是一种在特定情境下解决问题的经验总结,可以提高代码的可重用性、可维护性和灵活性。本资源包含一个PDF文档和一个TXT文本文件,两者都详细介绍了Java设计模式的基本概念和...

    大话设计模式总结材料.doc

    设计模式是软件开发中的一种最佳实践,它提供了在特定情况下解决常见问题的标准模板。以下是对文档中提到的设计模式的详细解释: 1. **简单工厂模式**:这是一种创建型设计模式,用于创建对象,通过一个中心工厂类...

    大话模式源代码

    《大话模式源代码》是一份关于编程设计模式的源代码集合,可能涵盖了软件开发中的多种经典设计模式。设计模式是解决软件设计中常见问题的经验总结,是经过反复验证的有效解决方案,可以提高代码的可读性、可维护性...

    大话设计模式总结参考.docx

    设计模式是软件工程中的一种重要概念,它代表了在特定情境下解决常见问题的最佳实践。以下是对提供的设计模式总结的详细解释: 1. **简单工厂模式**:它是一种静态工厂方法,用来创建对象,根据传入参数决定创建...

    28种最全设计模式源码.zip

    本资源包含28种设计模式的源码实现,覆盖了JAVA和C#两种主流编程语言,旨在帮助学习者深入理解并应用设计模式。 1. **简单工厂模式(01简单工厂模式)**:这种模式提供一个工厂类来创建对象,客户端通过调用工厂类...

    NET 设计模式

    代码可以运行,下载这个后,建议买-&gt;《大话设计模式这本书》。来辅助学习。有很多关于C#语言有关的设计模式分别由: 1、模板方法模式 2、外观模式 3、建造者模式 4、观察者模式 5、抽象工厂模式 6、状态模式 7、...

    设计模式课件

    包括UML、简单工厂模式、工厂方法模式、抽象工厂模式、建造者模式、原型模式、单例模式、适配器模式、桥接模式、组合模式、装饰模式、外观模式...中介者模式、备忘者模式、观察者模式、状态模式、策略模式、访问者模式...

    java各种设计模式

    这个压缩包文件"大话模式源代码"可能包含了28种不同的设计模式的实例源码,这对于学习和理解设计模式非常有帮助。 1. **单例模式**:确保一个类只有一个实例,并提供全局访问点。在Java中,单例模式通常通过私有...

    大话模式源代码 。。。.....

    《大话模式源代码》是一本专注于C#编程语言中设计模式实现的书籍,通过深入浅出的方式解析了各种常用的设计模式。在C#编程中,设计模式是提高代码可读性、可维护性和可扩展性的关键工具。下面将详细讨论几种重要的...

    线程的消息队列的代码资源

    在设计和使用线程的消息队列时,我们需要注意以下几点: 1. 消息大小:过大的消息可能会占用过多内存,影响队列性能。 2. 队列容量:设置合适的队列大小以防止溢出,同时避免接收线程因处理速度慢而堆积过多消息。 ...

Global site tag (gtag.js) - Google Analytics