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

xiaoxiao2021-02-27  371

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

第一种架构:

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

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就应用了桥接模式

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

转载请注明原文地址: https://www.6miu.com/read-1459.html

最新回复(0)