public interface AddressValidator { public boolean isValidAddress(String address, String zip, String state); } public class USAddressValidator implements AddressValidator { @Override public boolean isValidAddress(String address, String zip, String state) { // TODO Auto-generated method stub if (address.trim().length() < 10) return false; if (zip.trim().length() < 5) return false; if (zip.trim().length() > 10) return false; if (state.trim().length() != 2) return false; return true; } } public class Customer { public static final String US = "US"; public static final String CANADA = "Canada"; private String address; private String name; private String zip; private String state; private String type; public boolean isValidAddress() { boolean valid = false; AddressValidator addressValidator = getAddressValidator(type); valid = addressValidator.isValidAddress(address, zip, state); return valid; } public Customer(String address, String name, String state, String type, String zip) { super(); this.address = address; this.name = name; this.state = state; this.type = type; this.zip = zip; } public AddressValidator getAddressValidator(String type) { if (type.equals(US)) { return new USAddressValidator(); } return null; } public String getType() { return type; } } public class Main { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub Customer uCustomer = new Customer("Great Street 8", "Joey", "NY", "US", "55555"); System.out.println("The " + uCustomer.getType() + " Address is " + uCustomer.isValidAddress()); } } 这时知道一个加拿大地址的检查类,该类可以检查加拿大的地址是否有效,只知道该类的类名为CanadaAddressValidator,里面有一个CanadaAddressValidator(String address,String code,String province)方法,那么我们的代码怎么修改呢? 方法1: 修改Customer
public class Customer { ... public boolean isValidAddress() { boolean valid = false; if (type.equals(US)) { AddressValidator addressValidator = getAddressValidator(type); valid = addressValidator.isValidAddress(address, zip, state); } if (type.equals(CANADA)) { valid = new CanadaAddressValidator().isValidCanadaAddress(address, zip, state); } return valid; } ... } 方法2: 创建一个适配器
public class CanadaAddressValidatorAdapter extends CanadaAddressValidator implements AddressValidator { @Override public boolean isValidAddress(String address, String zip, String state) { // TODO Auto-generated method stub return super.isValidCanadaAddress(address, zip, state); } }package com.tang; public class Customer { ... public boolean isValidAddress() { boolean valid = false; AddressValidator addressValidator = getAddressValidator(type); valid = addressValidator.isValidAddress(address, zip, state); return valid; } public AddressValidator getAddressValidator(String type) { if (type.equals(US)) { return new USAddressValidator(); } if (type.equals(CANADA)) { return new CanadaAddressValidatorAdapter(); } return null; } ... } 本文参考了《深入浅出Java设计模式之适配器模式》
java适配器模式
最新推荐文章于 2024-09-15 09:47:04 发布