23种设计模式之中介者模式:以婚介所举例
首先是我们的婚介所接口它所具备的效果是:实现用户来登记和请求配对
/**
* およそ神
* 婚介所接口
*/
public interface MarryAgency {
void pair(Person person);//登记
void register(Person person);//请求配对
}
接下来是定义人类的属性
/**
* およそ神
* 定义人类的属性
*/
public class Person {
String name;
int age;
Sex sex;
int requestAge;
MarryAgency Agency;
public Person(String name, int age, Sex sex, int requestAge, MarryAgency agency) {
this.name = name;
this.age = age;
this.sex = sex;
this.requestAge = requestAge;
Agency = agency;
Agency.register(this);
}
}
//枚举创建男女属性
enum Sex {
MAN,WOMEN;
}
接下来是婚介所实现类
import java.util.ArrayList;
import java.util.List;
/**
* およそ神
* 婚介所实现类
*/
public class MarryAgencyImpl implements MarryAgency{
List<Person> people = new ArrayList<>();
@Override
public void pair(Person person) {
//传入所有嘉宾到people集合中去
people.add(person);
}
@Override
public void register(Person person) {
for (Person p : people) {
if (p.age == person.requestAge && p.sex != person.sex) {
System.out.println("恭喜"+person.name+"先生与"+p.name+"女士原地结婚!");
}
}
}
}
最后是我们的控制台测试前台类
/**
* およそ神
* 测试类前台
*/
public class TestZhongjiezhe {
public static void main(String[] args) {
MarryAgencyImpl marryAgency = new MarryAgencyImpl();
//上男嘉宾
Person fan = new Person("凡", 20, Sex.MAN, 20, marryAgency);
//上女嘉宾
Person kete = new Person("kete", 25, Sex.WOMEN, 20, marryAgency);
Person zhuli = new Person("zhuli", 25, Sex.WOMEN, 20, marryAgency);
Person shen = new Person("神", 20, Sex.WOMEN, 20, marryAgency);
//所有人都去婚介所登记
marryAgency.pair(fan);
marryAgency.pair(kete);
marryAgency.pair(zhuli);
marryAgency.pair(shen);
//传入要找对象的男嘉宾
marryAgency.register(fan);
}
}