也称为桥梁模式、接口模式或柄体模式, 是讲抽象部分与它的实现部分分离, 使它们均可以独立地变化
特征: 经过组合的方式创建两个类之间的联系, 而不是继承; 属于结构型模式数据库
适用场景:
一、 在抽象和具体实现之间须要增长更多的灵活性的场景
二、一个类存在两个(或多个)独立变化的维度, 而这两个(或多个)维度都须要独立进行扩展
三、不但愿适用继承,或由于多层继承致使系统类的个数剧增ide
public interface ICourse {
}
public interface INote { void edit(); }
public interface IVideo {
}
public class AbstractCourse implements ICourse{ private INote note; private IVideo video; public void setNote(INote note) { this.note = note; } public void setVideo(IVideo video) { this.video = video; } @Override public String toString() { return "AbstractCourse{" + "note=" + note + ", video=" + video + '}'; } }
public class JavaCourse extends AbstractCourse{ }
public class JavaNote implements INote{ @Override public void edit() { } }
public class JavaVideo implements IVideo{ }
public class PythonCourse extends AbstractCourse{ }
public class PythonNote implements INote{ @Override public void edit() { } }
public class PythonVideo implements IVideo{ }
======================================================================================this
public interface IMessage { /** * 发送消息的内容和接收人 * @param message * @param toUser */ void send(String message, String toUser); }
public class EmailMessage implements IMessage{ @Override public void send(String message, String toUser) { System.out.println("使用邮件消息发送" + message + "给" + toUser); } }
public class SmsMessage implements IMessage{ @Override public void send(String message, String toUser) { System.out.println("使用短信消息发送" + message + "给" + toUser); } }
public abstract class AbstractMessage { private IMessage message; public AbstractMessage(IMessage message) { this.message = message; } void sendMessage(String message, String toUser){ this.message.send(message, toUser); } }
public class NomalMessage extends AbstractMessage{ public NomalMessage(IMessage message) { super(message); } }
public class UrgencyMessage extends AbstractMessage{ public UrgencyMessage(IMessage message) { super(message); } @Override void sendMessage(String message, String toUser){ message = "【加急】" + message; super.sendMessage(message,toUser); } public Object watch(String messageId){ return null; } }
public static void main(String[] args) { IMessage message = new SmsMessage(); AbstractMessage abstractMessage = new NomalMessage(message); abstractMessage.sendMessage("调休申请","李总"); message = new EmailMessage(); abstractMessage = new UrgencyMessage(message); abstractMessage.sendMessage("调休申请","李总"); }
优势:
1、分离抽象部分及其具体实现部分
2、提升了系统的扩展性
3、符合开闭原则
4、符合合成复用原则
缺点;
1、增长了系统的理解和设计难度
2、须要正确地识别系统中两个独立变化的维度
源码中的运用: Java代码操做MySQL数据库, 经过 DriverManagerspa