客户端根据上下文选择两种付款方式:信用卡和PayPal。
public interface PaymentStrategy{ public void pay(int amount); }信用卡付款:
public class CreditCardStrategy implements PaymentStrategy{ private String name; private String cardNumber; private String cvv; private String dateOfExpiry; public CreditCardStrategy(String nm, String ccNum, String cvv, String expiryDate){ this.name=nm; this.cardNumber=ccNum; this.cvv=cvv; this.dateOfExpiry=expiryDate; } @Override public void pay(int amount){ System.out.println(amount +" paid with credit card"); } }PayPal付款:
public class PaypalStrategy implements PaymentStrategy{ private String emailId; private String password; public PaypalStrategy(String email, String pwd){ this.emailId=email; this.password=pwd; } @Override public void pay(int amount){ System.out.println(amount + " paid using Paypal."); } } public class ShoppingCart { ... public void pay(PaymentStrategy paymentMethod){ int amount=calculateTotal(); paymentMethod.pay(amount); } }客户端代码:
public class ShoppingCartTest{ public static void main(String[] args){ ShoppingCart cart=new ShoppingCart(); Item item1=new Item("1234",10); Item item2=new Item("5678",40); cart.addItem(item1); cart.addItem(item2); //pay by paypal cart.pay(new PaypalStrategy("myemail@exp.com", "mypwd")); //pay by credit card cart.pay(new CreditCardStrategy(“Alice", "1234", "786", "12/18")); } }模块间的关系:
制作两种不同的电脑,步骤相同,但是每一步的具体实现不同。
public abstract class PCBuilder{ protected abstract void BuildModel(); protected abstract void InstallCPU(); protected abstract void InstallOS(); void BuildPC(){ //通用逻辑 BuildModel(); InstallCPU(); InstallOS(); } } public class LenovoBuilder extends PCBuilder{ protected void BuildModel(){ System.out.println("Building Lenovo Model"); } protected void InstallCPU(){ System.out.println("Installing Intel CPU"); } protected void InstallOS(){ System.out.println("Installing Windows10 OS"); } } public class DellBuilder extends PCBuilder{ protected void BuildModel(){ System.out.println("Building Dell Model"); } protected void InstallCPU(){ System.out.println("Installing AMD CPU"); } protected void InstallOS(){ System.out.println("Installing Ubuntu OS"); } }