java适配器模式

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设计模式之适配器模式》
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值