接口及其设计模式

来源:互联网 发布:淘宝网买东西怎么买 编辑:程序博客网 时间:2024/05/01 23:36

1.接口有两种定义:

(1)对外的API.

(2)interface的声明.


关于接口的设计模式:

(1)定制服务模式:通过把每个服务都设为一个接口,这样可以粒度化每个服务。

如果需要某个特定的服务的组合,则只需要直接扩展细粒度的接口即可。

interface InternetService{public void connect();public void disconnect();}interface MailService{public void send();public void receive();}interface VirusService{public void begin();public void end();}class InternetServiceImpl implements InternetService{public void connect(){System.out.println("开始连接网络..."); }public void disconnect(){System.out.println("开始关闭网络..."); }}class MailServiceImpl implements MailService{public void send(){System.out.println("开始发送邮件..."); }public void receive(){System.out.println("开始接收邮件..."); }}class VirusServiceImpl implements VirusService{public void begin(){System.out.println("开始检查病毒..."); }public void end(){System.out.println("检查病毒完毕..."); }}interface Menu1 extends InternetService,MailService{}interface Menu2 extends InternetService,VirusService{}class Menu1Impl implements Menu1{private InternetService is;private MailService ms;public Menu1Impl(InternetService is,MailService ms){this.is = is;this.ms = ms;}public void connect(){is.connect();}public void disconnect(){is.disconnect();}public void send(){ms.send();}public void receive(){ms.receive();}}class Menu2Impl implements Menu2{private InternetService is;private VirusService vs;public Menu2Impl(InternetService is,VirusService vs){this.is = is;this.vs = vs;}public void connect(){is.connect();}public void disconnect(){is.disconnect();}public void begin(){vs.begin();}public void end(){vs.end();}}public class ServiceDemo{public static void main(String args[]){InternetService is = new InternetServiceImpl();MailService ms = new MailServiceImpl();VirusService vs = new VirusServiceImpl();Menu1Impl m1 = new Menu1Impl(is,ms);Menu2Impl m2 = new Menu2Impl(is,vs);System.out.println("检测menu1的功能中......"); m1.connect();m1.disconnect();m1.send();m1.receive();System.out.println("检测menu2的功能中......"); m2.connect();m2.disconnect();m2.begin();m2.end();}}

2.适配器设计模式

适配器是两个接口的中间过度,比如电脑必须要保证电压在15V,而电源的电压是220V,则需要一个适配器将220V转换成15V,因此适配器就是接口的转换作用。

interface Source{public int add(int a,int b);}class SourceImpl implements Source{public int add(int a,int b){return a+b;}}interface Target{public int addOne(int a);}class TargetImpl implements Target{private Source s ;public TargetImpl(Source s){this.s = s;}public int addOne(int a){return s.add(a,1);}}public class AdapterDemo{public static void main(String args[]){Source s = new SourceImpl();Target t = new TargetImpl(s);System.out.println("2+1="+t.addOne(2));}}

3.默认适配器模式

在java.awt.event包中,有许多接口,比如WindowEvent接口,比如此接口中有5个函数,如果要实现这个接口,必须要全部实现这些方法,如果我们只需要这个接口中的1个方法即可,但是其他的函数也必须实现,所以我们需要一个适配器,适配器中空实现接口,因此如果扩展适配器,则只要实现所需的方法即可。

4.标识类型接口模式

这个接口没有任何需要实现的方法,接口的意义只是标识作用,如果一个类实现了这个接口,只是说明这个类是某个类型的。

比如Serializable接口就是典型的标识类型接口。

5.常量接口模式

在接口中只有public static final 常量。

6.代理模式

拥有委托类、代理类、第三方。

注意:委托类和代理类实现同一个接口。

代理类帮助委托类处理一些无用的或者轻易解决的问题。

委托类是最终决定的类。

interface A{public boolean isAgree(int num);}class Source implements A{private int deadLine = 1000;public int getDeadLine(){return deadLine;}public boolean isAgree(int num){if(num>deadLine+100) return true;else return false;}}class Proxy implements A{private Source s;public Proxy(Source s){this.s = s;}public boolean isAgree(int num){if(num<s.getDeadLine()){return false;}return s.isAgree(num);}}class Target{private Proxy p;public Target(Proxy p){this.p = p;}public boolean isGet(int num){return p.isAgree(num);}}public class ProxyDemo{public static void main(String args[]){Source s = new Source();Proxy p = new Proxy(s);Target t = new Target(p);System.out.println(t.isGet(800));System.out.println(t.isGet(1200)); }}


原创粉丝点击