Driver interface
public interface Driver {
public boolean connect(String uri);
public Cursor query(String query);
}
bridge class:
public abstract class DriverBridge {
private Driver driver;
public Driver getDriver() {
return driver;
}
public void setDriver(Driver driver) {
this.driver = driver;
}
public abstract boolean connect(String uri);
public abstract Cursor query(String query);
}
public class MysqlDriver implements Driver {
@Override
public boolean connect(String uri) {
System.out.println(String.format("%s.%s called!", this.getClass().getName(), "connect()"));
return false;
}
@Override
public Cursor query(String query) {
System.out.println(String.format("%s.%s called!", this.getClass().getName(), "query()"));
return null;
}
}
public class DB2Driver implements Driver {
@Override
public boolean connect(String uri) {
System.out.println(String.format("%s.%s called!", this.getClass().getName(), "connect()"));
return false;
}
@Override
public Cursor query(String query) {
System.out.println(String.format("%s.%s called!", this.getClass().getName(), "query()"));
return null;
}
}
public class OracleDriver implements Driver {
@Override
public boolean connect(String uri) {
System.out.println(String.format("%s.%s called!", this.getClass().getName(), "connect()"));
return false;
}
@Override
public Cursor query(String query) {
System.out.println(String.format("%s.%s called!", this.getClass().getName(), "query()"));
return null;
}
}
public class WeatherBridge extends DriverBridge {
@Override
public boolean connect(String uri) {
return getDriver().connect(uri);
}
@Override
public Cursor query(String query) {
return getDriver().query(query);
}
}
public class WorkClass {
public void test() {
DriverBridge driverBridge = new WeatherBridge();
driverBridge.setDriver(new MysqlDriver());
driverBridge.connect("");
driverBridge.query("");
driverBridge.setDriver(new DB2Driver());
driverBridge.connect("");
driverBridge.query("");
}
}
I/System.out: com.example.qinghua_liu.myapplication.designpatten.struct.adapt.MysqlDriver.query() called!
I/System.out: com.example.qinghua_liu.myapplication.designpatten.struct.adapt.DB2Driver.connect() called!
I/System.out: com.example.qinghua_liu.myapplication.designpatten.struct.adapt.DB2Driver.query() called!
public interface Weather {
public String getWeatherText();
}
兩個接口的實現類:public class Sunny implements Weather {
@Override
public String getWeatherText() {
return "clear";
}
}
public class Rain implements Weather {
@Override
public String getWeatherText() {
return "rainy";
}
}
天氣橋接抽象類:
public abstract class WeatherBridge {
private Weather weather;
public WeatherBridge(Weather weather) {
this.weather = weather;
}
public Weather getWeather() {
return weather;
}
public void setWeather(Weather weather) {
this.weather = weather;
}
public abstract String showWeather();
}
抽象的子類白天類與夜晚類:
public class DayTimeWeather extends WeatherBridge {
@Override
public String showWeather() {
//System.out.println(String.format("A %s day time", getWeather().getWeatherText()));
return String.format("A %s day time", getWeather().getWeatherText());
}
public DayTimeWeather(Weather weather) {
super(weather);
}
}
public class NightWeather extends WeatherBridge {
@Override
public String showWeather() {
// System.out.println(String.format("A %s night", getWeather().getWeatherText()));
return String.format("A %s night", getWeather().getWeatherText());
}
public NightWeather(Weather weather) {
super(weather);
}
}
測試:
WeatherBridge weatherBridge= new DayTimeWeather(new Sunny());
System.out.println(weatherBridge.showWeather());
weatherBridge.setWeather(new Rain());
System.out.println(weatherBridge.showWeather());
weatherBridge = new NightWeather(new Sunny());
System.out.println(weatherBridge.showWeather());
weatherBridge.setWeather(new Rain());
System.out.println(weatherBridge.showWeather());
輸出:
I/System.out: A clear day time
I/System.out: A rainy day time
I/System.out: A clear night
I/System.out: A rainy night
public abstract class SeasonBridge {
private WeatherBridge weatherBridge;
public SeasonBridge(WeatherBridge weatherBridge) {
this.weatherBridge = weatherBridge;
}
public WeatherBridge getWeatherBridge() {
return weatherBridge;
}
public void setWeatherBridge(WeatherBridge weatherBridge) {
this.weatherBridge = weatherBridge;
}
public abstract String showWeather();
}
public class Summer extends SeasonBridge {
public Summer(WeatherBridge weatherBridge) {
super(weatherBridge);
}
@Override
public String showWeather() {
return String.format("%s in summer",getWeatherBridge().showWeather());
}
}
public class Winter extends SeasonBridge {
public Winter(WeatherBridge weatherBridge) {
super(weatherBridge);
}
@Override
public String showWeather() {
return String.format("%s in winter",getWeatherBridge().showWeather());
}
}
測試代碼:
WeatherBridge weatherBridge= new DayTimeWeather(new Sunny());
SeasonBridge seasonBridge = new Summer(weatherBridge);
System.out.println(seasonBridge.showWeather());
weatherBridge.setWeather(new Rain());
System.out.println(seasonBridge.showWeather());
seasonBridge.setWeatherBridge(new NightWeather(new Sunny()));
System.out.println(seasonBridge.showWeather());
seasonBridge = new Winter(weatherBridge);
System.out.println(seasonBridge.showWeather());
輸出結果:
I/System.out: A clear day time in summer
I/System.out: A rainy day time in summer
I/System.out: A clear night in summer
I/System.out: A rainy day time in winter