2019年5月13日 星期一

7天學會設計模式 CHAP22 橋接模式 Bridge

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