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內抵達 這是一封掛號信,收件人必須簽名 **/