http://www.books.com.tw/products/0010750585
chap22.
橋接模式 Bridge
目的:將抽象介面與實作類別切開,使兩者可以各自變化而不影響彼此
package com.ssc24.chap22.demo01; public abstract class Mail { abstract void registerState(); }
package com.ssc24.chap22.demo01; public class RegisterMail extends Mail { @Override void registerState() { System.out.println("這是一封掛號信,收件人必須簽名"); } }
package com.ssc24.chap22.demo01; public class NoRegisterMail extends Mail { @Override void registerState() { System.out.println("這不是掛號信,收件人不用簽名"); } }
package com.ssc24.chap22.demo01; public abstract class MailSender { protected Mail mail; private MailSender(){ } public MailSender(Mail mail) { this.mail = mail; } public abstract void send(); }
package com.ssc24.chap22.demo01; public class NormalMail extends MailSender { public NormalMail(Mail mail) { super(mail); } @Override public void send() { System.out.println(">>信件寄出後3~5天內抵達"); super.mail.registerState(); } }
package com.ssc24.chap22.demo01; public class PromptMail extends MailSender { public PromptMail(Mail mail) { super(mail); } @Override public void send() { System.out.println(">>信件寄出後24hr內抵達"); super.mail.registerState(); } }
package com.ssc24.chap22.demo01; import static org.junit.Assert.*; import org.junit.Test; public class RemoteTest { @Test public void test() { System.out.println("===橋接模式測試==="); System.out.println("---一般信件測試---"); MailSender mailSender = new NormalMail(new NoRegisterMail()); mailSender.send(); mailSender = new NormalMail(new RegisterMail()); mailSender.send(); System.out.println("---限時信件測試---"); mailSender = new PromptMail(new NoRegisterMail()); mailSender.send(); mailSender = new PromptMail(new RegisterMail()); mailSender.send(); } }
/** ===橋接模式測試=== ---一般信件測試--- >>信件寄出後3~5天內抵達 這不是掛號信,收件人不用簽名 >>信件寄出後3~5天內抵達 這是一封掛號信,收件人必須簽名 ---限時信件測試--- >>信件寄出後24hr內抵達 這不是掛號信,收件人不用簽名 >>信件寄出後24hr內抵達 這是一封掛號信,收件人必須簽名 **/