模式简析
具体实例
import java.util.ArrayList;
import java.util.List;
public class Demo1 {
public static void main(String[] args) {
List<Person> list = new ArrayList<Person>();
Person p1 = new Teacher("王老师","设计模式",48);
Person p2 = new Teacher("李老师","数据库",48);
Person p3 = new Student("张同学","设计模式",100);
Person p4 = new Student("王同学","数据库",100);
list.add(p4);
list.add(p3);
list.add(p2);
list.add(p1);
PresidentVisiter p =new PresidentVisiter();
for(Person person :list) {
p.Visit(person);
}
YuanZHangVisiter y = new YuanZHangVisiter();
for(Person person:list) {
y.Visit(person);
}
}
}
class Person{
private String name;
public Person(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
class Teacher extends Person{
private String Course;
private int Amount;
public Teacher(String name,String Course,int Amount) {
super(name);
this.Course = Course;
this.Amount = Amount;
}
public String getCourse() {
return Course;
}
public int getAmount() {
return Amount;
}
}
class Student extends Person{
private String Course;
private int grade;
public Student(String name,String Course,int grade) {
super(name);
this.Course = Course;
this.grade = grade;
}
public String getCourse() {
return Course;
}
public int getGrade() {
return grade;
}
}
class PresidentVisiter{
public void Visit(Person person) {
if(person instanceof Teacher) {
Teacher teacher = (Teacher)person;
System.out.println("校长访问老师:"+teacher.getName()+"学时:"+teacher.getAmount());
}else if(person instanceof Student) {
Student student = (Student)person;
System.out.println("校长访问学生:"+student.getName()+"课程:"+student.getCourse());
}
}
}
class YuanZHangVisiter{
public void Visit(Person person) {
if(person instanceof Teacher) {
Teacher teacher = (Teacher)person;
System.out.println("院长访问老师:"+teacher.getName()+"课程:"+teacher.getCourse());
}else if(person instanceof Student) {
Student student = (Student)person;
System.out.println("院长访问学生:"+student.getName()+"成绩:"+student.getGrade());
}
}
}
import java.util.ArrayList;
import java.util.List;
public class Demo1 {
public static void main(String[] args) {
List<Person> list = new ArrayList<Person>();
Person p1 = new Teacher("王老师","设计模式",48);
Person p2 = new Teacher("李老师","数据库",48);
Person p3 = new Student("张同学","设计模式",100);
Person p4 = new Student("王同学","数据库",100);
list.add(p4);
list.add(p3);
list.add(p2);
list.add(p1);
PresidentVisiter p =new PresidentVisiter();
for(Person person :list) {
if(person instanceof Teacher) {
Teacher t =(Teacher)person;
p.Visit(t);
}else if(person instanceof Student) {
Student s =(Student)person;
p.Visit(s);
}
}
YuanZHangVisiter y = new YuanZHangVisiter();
for(Person person:list) {
if(person instanceof Teacher) {
Teacher t =(Teacher)person;
y.Visit(t);
}else if(person instanceof Student) {
Student s =(Student)person;
y.Visit(s);
}
}
}
}
class Person{
private String name;
public Person(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
class Teacher extends Person{
private String Course;
private int Amount;
public Teacher(String name,String Course,int Amount) {
super(name);
this.Course = Course;
this.Amount = Amount;
}
public String getCourse() {
return Course;
}
public int getAmount() {
return Amount;
}
}
class Student extends Person{
private String Course;
private int grade;
public Student(String name,String Course,int grade) {
super(name);
this.Course = Course;
this.grade = grade;
}
public String getCourse() {
return Course;
}
public int getGrade() {
return grade;
}
}
interface Visiter{
void Visit(Teacher teacher);
void Visit(Student student);
}
class PresidentVisiter implements Visiter{
@Override
public void Visit(Teacher teacher) {
System.out.println("校长访问老师:"+teacher.getName()+"学时:"+teacher.getAmount());
}
@Override
public void Visit(Student student) {
System.out.println("校长访问学生:"+student.getName()+"课程:"+student.getCourse());
}
}
class YuanZHangVisiter implements Visiter{
@Override
public void Visit(Teacher teacher) {
System.out.println("院长访问老师:"+teacher.getName()+"课程:"+teacher.getCourse());
}
@Override
public void Visit(Student student) {
System.out.println("院长访问学生:"+student.getName()+"成绩:"+student.getGrade());
}
}
import java.util.ArrayList;
import java.util.List;
public class Demo1 {
public static void main(String[] args) {
Person p1 = new Teacher("王老师","设计模式",48);
Person p2 = new Teacher("李老师","数据库",48);
Person p3 = new Student("张同学","设计模式",100);
Person p4 = new Student("王同学","数据库",100);
PresidentVisiter p =new PresidentVisiter();
YuanZHangVisiter y = new YuanZHangVisiter();
ObjectList ol = new ObjectList();
ol.Attach(p4);
ol.Attach(p3);
ol.Attach(p2);
ol.Attach(p1);
ol.Display(p);
System.out.println("============================================");
ol.Display(y);
}
}
abstract class Person{
private String name;
public Person(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public abstract void accept(Visiter visiter);
}
class Teacher extends Person{
private String Course;
private int Amount;
public Teacher(String name,String Course,int Amount) {
super(name);
this.Course = Course;
this.Amount = Amount;
}
public String getCourse() {
return Course;
}
public int getAmount() {
return Amount;
}
@Override
public void accept(Visiter visiter) {
visiter.Visit(this);
}
}
class Student extends Person{
private String Course;
private int grade;
public Student(String name,String Course,int grade) {
super(name);
this.Course = Course;
this.grade = grade;
}
public String getCourse() {
return Course;
}
public int getGrade() {
return grade;
}
@Override
public void accept(Visiter visiter) {
visiter.Visit(this);
}
}
interface Visiter{
void Visit(Teacher teacher);
void Visit(Student student);
}
class PresidentVisiter implements Visiter{
@Override
public void Visit(Teacher teacher) {
System.out.println("校长访问老师:"+teacher.getName()+"学时:"+teacher.getAmount());
}
@Override
public void Visit(Student student) {
System.out.println("校长访问学生:"+student.getName()+"课程:"+student.getCourse());
}
}
class YuanZHangVisiter implements Visiter{
@Override
public void Visit(Teacher teacher) {
System.out.println("院长访问老师:"+teacher.getName()+"课程:"+teacher.getCourse());
}
@Override
public void Visit(Student student) {
System.out.println("院长访问学生:"+student.getName()+"成绩:"+student.getGrade());
}
}
class ObjectList{
private List<Person> list = new ArrayList<Person>();
public void Attach(Person person) {
list.add(person);
}
public void Detach(Person person) {
list.remove(person);
}
public void Display(Visiter visiter) {
for(Person p:list) {
p.accept(visiter);
}
}
}
import java.util.ArrayList;
import java.util.List;
public class Demo2 {
public static void main(String[] args) {
ObjecStructure o =new ObjecStructure();
o.Attach(new ConcreteA());
o.Attach(new ConcreteB());
Visitor1 v1 = new Visitor1();
Visitor2 v2 = new Visitor2();
o.Accept(v1);
System.out.println("=====================================");
o.Accept(v2);
}
}
interface Visitor{
void VisitConcreteA(ConcreteA A);
void VisitConcreteB(ConcreteB B);
}
class Visitor1 implements Visitor{
@Override
public void VisitConcreteA(ConcreteA A) {
System.out.println(A.getClass().toString()+"被"+this.getClass().toString()+"访问");
}
@Override
public void VisitConcreteB(ConcreteB B) {
System.out.println(B.getClass().toString()+"被"+this.getClass().toString()+"访问");
}
}
class Visitor2 implements Visitor{
@Override
public void VisitConcreteA(ConcreteA A) {
System.out.println(A.getClass().toString()+"被"+this.getClass().toString()+"访问");
}
@Override
public void VisitConcreteB(ConcreteB B) {
System.out.println(B.getClass().toString()+"被"+this.getClass().toString()+"访问");
}
}
abstract class Element{
public abstract void Accept(Visitor visitor);
}
class ConcreteA extends Element{
@Override
public void Accept(Visitor visitor) {
visitor.VisitConcreteA(this);
}
public void OperatorA() {
}
}
class ConcreteB extends Element{
@Override
public void Accept(Visitor visitor) {
visitor.VisitConcreteB(this);
}
public void OperatorB() {
}
}
class ObjecStructure{
private List<Element> list = new ArrayList<Element>();
public void Attach(Element element) {
list.add(element);
}
public void Detach(Element element) {
list.remove(element);
}
public void Accept(Visitor visitor) {
for(Element p:list) {
p.Accept(visitor);
}
}
}