Android的開發之&java23中設計模式------中介者模式

/**
 * Created by Administrator on 2017-10-12.
 * 抽象中介者類
 */

public abstract class Mediator {
    //用於添加存儲“房東”
    protected List<Person> landlordList=new ArrayList<>();
    //用於添加存儲“租房人”
    protected List<Person> renterList=new ArrayList<>();

    /**
     * 中介者註冊房東信息
     */
    public void registerLandlord(Person landlord){
        landlordList.add(landlord);
    }

    /**
     * 中介者註冊  租房人信息
     */
    public void registerRenter(Person renter){
        renterList.add(renter);
    }

    /**
     * 聲明抽象方法,由具體中介者子類實現,消息的中轉和協調
     */
    public abstract void operation(Person person,String message);
}



/**
 * Created by Administrator on 2017-10-12.
 * 具體中介者類:這裏的角色是 房屋出租中介
 */

public class HouseMediator extends Mediator {
    @Override
    public void operation(Person person, String message) {
        if (person instanceof Renter){
            //將租屋的需求消息傳遞給 註冊了的房東們
            for (Person landlord:landlordList){
                landlord.getMessage(message);
            }
        }else if (person instanceof Landlord){
            for (Person renter : renterList){
                renter.getMessage(message);
            }
        }
    }
}

/**
 * Created by Administrator on 2017-10-12.
 * 抽象同事類
 */

public abstract class Person {
    //維持一個抽象中介者的引用
    protected Mediator mediator;
    protected String name;

    public Person(String name,Mediator mediator){
        this.name=name;
        this.mediator=mediator;
    }

    /**
     * 設置中介者對象
     */
    public void setMediator(Mediator mediator){
        this.mediator=mediator;
    }
    /**
     * 向中介發送消息
     */
    protected abstract void sendMessage(String msg);

    /**
     * 從中介獲取消息
     */
    protected abstract void getMessage(String msg);
}

/**
 * Created by Administrator on 2017-10-12.
 * 房東
 */

public class Landlord extends Person {
    public Landlord(String name, Mediator mediator) {
        super(name, mediator);
    }

    @Override
    protected void sendMessage(String msg) {
        mediator.operation(this,msg);
    }

    @Override
    protected void getMessage(String msg) {
        System.out.println("房東["+ name +"]收到中介發來的消息:" + msg);
    }
}

/**
 * Created by Administrator on 2017-10-12.
 * 租房者
 */

public class Renter extends Person{
    public Renter(String name, Mediator mediator) {
        super(name, mediator);
    }

    @Override
    protected void sendMessage(String msg) {
        mediator.operation(this,msg);
    }

    @Override
    protected void getMessage(String msg) {
        System.out.println("租房人[" + name + "]收到中介發來的消息: " + msg);
    }
}

/**
 * 中介者模式(Mediator)
 */
public class MediatorMethodActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_mediator_method);

        //實例化房屋中介
        Mediator mediator=new HouseMediator();

        Person landlordA,landlordB,renter;
        landlordA=new Landlord("房東張三",mediator);
        landlordB=new Landlord("房東李四",mediator);

        renter=new Renter("租房者王五",mediator);

        //房東註冊中介
        mediator.registerLandlord(landlordA);
        mediator.registerLandlord(landlordB);
        //租房者註冊中介
        mediator.registerLandlord(renter);

        //租房者發送求租消息
        renter.sendMessage("想在天通苑租套房子");
        System.out.println("--------------------------------------");
        //房東張三發送房屋出租消息
        landlordA.sendMessage("霍營有一室一廳出租");
    }
}

github地址:https://github.com/zyj18410105150/DesignMode

發佈了68 篇原創文章 · 獲贊 17 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章