一、定义:
表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素的类的
前提下定义作用于这些元素的新操作。
二、UML图:
三、课本男人女人不同状态:
UML:
代码实现:
package 男人女人不同情景不同状态;
public abstract class Action {
public abstract void getWomenConclusion(Women women);
public abstract void getManConclusion(Man man);
}
package 男人女人不同情景不同状态;
public class FailAction extends Action {
@Override
public void getWomenConclusion(Women women) {
System.out.println("女人失败时。。。");
}
@Override
public void getManConclusion(Man man) {
System.out.println("男人失败时。。。");
}
}
package 男人女人不同情景不同状态;
public class SuccessAction extends Action {
@Override
public void getWomenConclusion(Women women) {
System.out.println("女人在成功时。。。。。。");
}
@Override
public void getManConclusion(Man man) {
System.out.println("男人成功时。。。");
}
}
package 男人女人不同情景不同状态;
public abstract class Person {
public abstract void accept(Action action);
}
package 男人女人不同情景不同状态;
public class Man extends Person {
@Override
public void accept(Action action) {
action.getManConclusion(this);
}
}
package 男人女人不同情景不同状态;
public class Women extends Person {
@Override
public void accept(Action action) {
action.getWomenConclusion(this);
}
}
package 男人女人不同情景不同状态;
import java.util.ArrayList;
import java.util.List;
public class ObjectStruct {
private List<Person> elements=new ArrayList<Person>();
public void attach(Person element) {
elements.add(element);
}
public void detach(Person element) {
elements.remove(element);
}
public void display(Action action) {
for(Person p:elements) {
p.accept(action);
}
}
}
package 男人女人不同情景不同状态;
public class Man extends Person {
@Override
public void accept(Action action) {
action.getManConclusion(this);
}
}
四、CRM例子:
机房机器导入自己电脑乱码,eclipse好几个编码选项现在还没分清楚。。。。。。
代码实现:
package crm;
public abstract class Action {
public abstract void getPersonageConclusion(Personage personage);
public abstract void getEnterpriseConclusion(Enterprise enterprise);
}
package crm;
public class Analyze extends Action {
@Override
public void getPersonageConclusion(Personage personage) {
// TODO Auto-generated method stub
System.out.println("。。。。。。。。");
}
@Override
public void getEnterpriseConclusion(Enterprise enterprise) {
// TODO Auto-generated method stub
System.out.println("。。。。。。。。。");
}
}
package crm;
public class Enterprise extends Person {
@Override
public void accept(Action action) {
// TODO Auto-generated method stub
action.getEnterpriseConclusion(this);
}
}
package crm;
import java.util.ArrayList;
import java.util.List;
public class ObjStruct {
private List<Person> person = new ArrayList<Person>();
public void attach(Person per)
{
person.add(per);
}
public void detach(Person per)
{
person.remove(per);
}
public void Display(Action action)
{
for(Person p:person)
{
p.accept(action);
}
}
}
package crm;
public abstract class Person {
public abstract void accept(Action action);
}
package crm;
public class Personage extends Person {
@Override
public void accept(Action action) {
// TODO Auto-generated method stub
action.getPersonageConclusion(this);
}
}
package crm;
public class Preference extends Action {
@Override
public void getPersonageConclusion(Personage personage) {
// TODO Auto-generated method stub
System.out.println("。。。。。。。。。。");
}
@Override
public void getEnterpriseConclusion(Enterprise enterprise) {
// TODO Auto-generated method stub
System.out.println("。。。。。。。。。。");
}
}
package crm;
public class Service extends Action {
@Override
public void getPersonageConclusion(Personage personage) {
// TODO Auto-generated method stub
System.out.println("。。。。。。。。。。");
}
@Override
public void getEnterpriseConclusion(Enterprise enterprise) {
// TODO Auto-generated method stub
System.out.println("..........");
}
}
package crm;
public class Client {
public static void main(String[] args) {
// TODO Auto-generated method stub
ObjStruct o = new ObjStruct();
o.attach(new Enterprise());
o.attach(new Personage());
Service s1 = new Service();
o.Display(s1);
Analyze a1 = new Analyze();
o.Display(a1);
Preference p1 = new Preference();
o.Display(p1);
}
}
THE END;