当前位置:   article > 正文

java基础-桥接模式_abastract java中public的还是

abastract java中public的还是

桥接模式的定义

桥接模式(Bridge Pattern))也称为桥梁模式、接口(Interfce)模式或柄体(Handle and Body)模式,是将抽象部分与它的具体实现部分分离,使它们都可以独立地变化
通过组合的方式建立两个类之间的联系,而不是继承
 
属于结构型模式。
 


应用场景


1、在抽象和具体实现之间需要增加更多的灵活性的场景
2、一个类存在两个(或多个)独立变化的维度,而这两个(或多个)维度都需要独立进行扩展
3、不希望使用继承,或因为多层继承导致系统类的个数剧增

连接起两个空间维度的桥

发达:就是抽象维度;
虚拟网络与真实网络的桥接


桥接模式的优点

1、分离抽象部分及其具体实现部分
2、提高了系统的扩展性
3、符合开闭原则
4、符合合成复用原则


桥接模式的缺点

1、增加了系统的理解与设计难度
2、需要正确地识别系统中两个独立变化的维度


举个栗子#课程

  1. public interface ICourse {
  2. }
  3. public interface INote {
  4. void edit();
  5. }
  6. public interface IVideo {
  7. }
  8. public class JavaNote implements INote {
  9. @Override
  10. public void edit() {
  11. }
  12. }
  13. public class JavaVideo implements IVideo {
  14. }
  15. public class PythonNote implements INote {
  16. @Override
  17. public void edit() {
  18. }
  19. }
  20. public class PythonVideo implements IVideo {
  21. }
  22. // 定义一个桥接
  23. public class AbstractCourse implements ICourse {
  24. private INote note;
  25. private IVideo video;
  26. public void setNote(INote note) {
  27. this.note = note;
  28. }
  29. public void setVideo(IVideo video) {
  30. this.video = video;
  31. }
  32. @Override
  33. public String toString() {
  34. return "AbstractCourse{" +
  35. "note=" + note +
  36. ", video=" + video +
  37. '}';
  38. }
  39. }
  40. public class JavaCourse extends AbstractCourse {
  41. }
  42. public class PythonCourse extends AbstractCourse {
  43. }

t图:

举个栗子#消息

  1. public interface IMessage {
  2. //发送消息的内容和接收人
  3. void send(String message,String toUser);
  4. }
  5. public class EmailMessage implements IMessage {
  6. @Override
  7. public void send(String message, String toUser) {
  8. System.out.println("使用邮件消息发送" + message + "给" + toUser);
  9. }
  10. }
  11. public class SmsMessage implements IMessage {
  12. @Override
  13. public void send(String message, String toUser) {
  14. System.out.println("使用短信消息发送" + message + "给" + toUser);
  15. }
  16. }
  17. //俺是桥接,一个是抽象,一个是具体实现,但是我拥有的必须是行为,是抽象,
  18. public abstract class AbastractMessage {
  19. private IMessage message;
  20. public AbastractMessage(IMessage message) {
  21. this.message = message;
  22. }
  23. void sendMessage(String message,String toUser){
  24. this.message.send(message,toUser);
  25. }
  26. }
  27. public class UrgencyMessage extends AbastractMessage {
  28. public UrgencyMessage(IMessage message) {
  29. super(message);
  30. }
  31. @Override
  32. void sendMessage(String message, String toUser){
  33. message = "【加急】" + message;
  34. super.sendMessage(message,toUser);
  35. }
  36. public Object watch(String messageId){
  37. return null;
  38. }
  39. }
  40. public class NomalMessage extends AbastractMessage {
  41. public NomalMessage(IMessage message) {
  42. super(message);
  43. }
  44. }
  45. public class Test {
  46. public static void main(String[] args) {
  47. IMessage message = new SmsMessage();
  48. AbastractMessage abastractMessage = new NomalMessage(message);
  49. abastractMessage.sendMessage("加班申请","王总");
  50. message = new EmailMessage();
  51. abastractMessage = new UrgencyMessage(message);
  52. abastractMessage.sendMessage("加班申请","王总");
  53. }
  54. }

图2:

图2-1:

数据库引用栗子

  1. // jdbc是抽象模块
  2. public interface Driver {
  3. Connection connect(String url, java.util.Properties info)
  4. throws SQLException;
  5. }
  6. // mysql是具体实现Driver
  7. public class Driver extends NonRegisteringDriver implements java.sql.Driver {
  8. public Driver() throws SQLException {
  9. }
  10. static {
  11. try {
  12. // msyql实现给new进行,添加到接口
  13. DriverManager.registerDriver(new Driver());
  14. } catch (SQLException var1) {
  15. throw new RuntimeException("Can't register driver!");
  16. }
  17. }
  18. }
  19. //
  20. public static synchronized void registerDriver(java.sql.Driver driver,
  21. DriverAction da)
  22. throws SQLException {
  23. /* Register the driver if it has not already been added to our list */
  24. if(driver != null) {
  25. registeredDrivers.addIfAbsent(new DriverInfo(driver, da));
  26. } else {
  27. // This is for compatibility with the original DriverManager
  28. throw new NullPointerException();
  29. }
  30. println("registerDriver: " + driver);
  31. }


与适配器相比

适配器强调的是兼容

桥接强调是连接

适配器必须要实现一个功能

桥接是指定一个规则

1
 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/569013
推荐阅读
相关标签
  

闽ICP备14008679号