设计模式之---桥接模式

还是举例说明吧!现在有一个问题,那就是手机和手机应用。手机有很多牌子,应用也有很多,那某个手机上的应用,该怎么实现呢。

第一种架构:

这种架构非常简单,但有个明显的问题,那就是可扩展性差。比如再来一种手机或者应用,那类又得增加好几个。他虽然符合开放封闭原则,但却违背了职责单一性原则即一个类应该只有一个引起它变化的原因。这个时候,桥接模式就派上用场了。

UML类图里我们就能看出来,它使用了类的聚合而不是继承,设计模式里有一个原则,那就是合成/聚合复用原则。即尽量使用合成/聚合而不是继承。这是为了提高类的可复用性。

上代码:

package bridge;

public abstract class Phone {
	protected App app;
	public abstract void phone();
	public App getApp() {
		return app;
	}
	public void setApp(App app) {
		this.app = app;
	}
	public void useApp() {
		phone();app.app();
	}
}
package bridge;

public class IPhone extends Phone {

	@Override
	public void phone() {
		// TODO Auto-generated method stub
		System.out.print("--IPhone--");
	}

}
package bridge;

public class Android extends Phone {

	@Override
	public void phone() {
		// TODO Auto-generated method stub
		System.out.print("--Android--");
	}

}
package bridge;

public interface App {
	void app();
}
package bridge;

public class Game implements App {

	@Override
	public void app() {
		// TODO Auto-generated method stub
		System.out.println("play game");
	}

}
package bridge;

public class MailList implements App {

	@Override
	public void app() {
		// TODO Auto-generated method stub
		System.out.println("open maillist");
	}

}
package bridge;

public class Client {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Phone iPhone=new IPhone();
		iPhone.setApp(new Game());
		iPhone.useApp();
		
		Phone android=new Android();
		android.setApp(new MailList());
		android.useApp();
	}

}
桥接模式就是解决了这种多维度变化的类的组合问题

jdbc就应用了桥接模式

不同的数据库管理系统可以任意切换,但对应用程序的实现影响不大。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值