接口上最常用的设计模式,外观模式(Facade),桥接模式(Bridge),他们都是属于结构型Structural的设计模式。
可能大伙对外观模式不是很熟啊,这是啥模式啊,其实平时我们是经常使用的,比如说,引入第三方的jar包,它提供的所有的api功能全在一个client类,我们
只需要操作client这个类,调用就行了,这个就是外观模式啊。
外观模式:这个外观类为子系统提供一个共同对外的接口。
demo代码实现:
public class FacadePraticeDay4 { /** * 模拟jar包的内部的接口 */ public static interface LogicService{ void printName(String name); } /** * 模拟jar包的内部的接口实现1 */ public static class LogicServiceImpl1 implements LogicService{ @Override public void printName(String name) { System.out.println(String.format("name:%s-%s","logicServiceImpl1",name)); } } /** * 模拟jar包的内部的接口实现2 */ public static class LogicServiceImpl2 implements LogicService{ @Override public void printName(String name) { System.out.println(String.format("name:%s-%s","logicServiceImpl2",name)); } } /** * 模拟jar包的内部的接口实现3 */ public static class LogicServiceImpl3 implements LogicService{ @Override public void printName(String name) { System.out.println(String.format("name:%s-%s","logicServiceImpl3",name)); } } /** * 提供一个clientService给客户端访问 * 里面是所有的接口功能实现 */ public static class ClientService{ private LogicServiceImpl1 logicServiceImpl1; private LogicServiceImpl2 logicServiceImpl2; private LogicServiceImpl3 logicServiceImpl3; public ClientService() { this.logicServiceImpl1 = new LogicServiceImpl1(); this.logicServiceImpl2 = new LogicServiceImpl2(); this.logicServiceImpl3 = new LogicServiceImpl3(); } public void printName1(String name){ logicServiceImpl1.printName(name); } public void printName2(String name){ logicServiceImpl2.printName(name); } public void printName3(String name){ logicServiceImpl3.printName(name); } } public static void main(String[] args) { ClientService clientService = new ClientService(); clientService.printName1("你叉叉"); clientService.printName2("你叉叉"); clientService.printName3("你叉叉"); } }
桥接模式,可能又有很多人不知道啊,这个模式好陌生啊,怎么会常用呢,其实真的是最常用的设计模式了,我们的MVC三层架构,controller里面放着service,这就是桥接模式
这扩展一下知识点,什么是MVC模式:(模型-视图-控制器)
M是业务模型,V是用户界面,C指控制器,使用MVC的目的是将M和V的代码分离,C的存在是确保M和V的同步,M一旦改变,V随之同步。
controller里面使用@Autowired注解注入Service接口,这个service就是一个桥,可以放serviceImpl1,这个实现类,可以放serviceImpl2这个实现类
代码实现:
public class BridgePraticeDay5 { public static class MvcController{ //这个就是桥,既可以连接impl1,可以连接impl2 private MvcService mvcService; public MvcController(MvcService mvcService) { this.mvcService = mvcService; } public void execute(){ this.mvcService.execute(); } } public static interface MvcService{ void execute(); } public static class MvcServiceImpl1 implements MvcService{ @Override public void execute() { System.out.println("execute1"); } } public static class MvcServiceImpl2 implements MvcService{ @Override public void execute() { System.out.println("execute2"); } } public static void main(String[] args) { MvcController mvcController = new MvcController(new MvcServiceImpl1()); mvcController.execute(); mvcController = new MvcController(new MvcServiceImpl2()); mvcController.execute(); } }
好的,到饭点了,吃饭了