接口及其设计模式

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)); } }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值