设计模式(二)-- 接口设计模式概述

一、抽象类与java接口的区别

  • 一个类可以实现任意多个接口,但它只能作为一个抽象类的子类;
  • 一个抽象类可以含有若干个非抽象方法,而一个接口的所有方法都是抽象的,无论是否将它的方法显式地声明为抽象;
  • 一个抽象类可以声明实例变量,其子类可以继承这些实例变量,而一个接口不能声明实例变量,不过接口可以声明static final修饰的域;
  • 一个抽象类可以定义构造器方法,而一个接口不能;
  • 一个抽象类的可见性修饰符可以是public,protected,private,或者无修饰符(表示包内可见),而一个接口的可见性修饰符只能是public,或者无修饰符(表示包内可见)。
  • 一个抽象类的方法的可见性修饰符可以是protected,private,或者无修饰符(包内可见),而一个接口的方法可见性修饰符只能是public;

二、java接口的扩展

  • 通过extends使用继承可以进行接口的扩展,派生接口保有父接口的成员,子接口还可以加入新的成员和方法满足实际问题的需要。

三、java中的标记接口(mark interface)

  • java标记接口(mark interface)不会实现任何方法,仅是通知JVM去识别一个类是否具有某个特性的功能。例如:Serializable通知JVM该类可序列化;Cloneable通知可克隆。标识接口是没有任何方法和属性的接口.它仅仅表明它的类属于一个特定的类型,供其他代码来测试允许做一些事情。标识接口作用:简单形象的说就是给某个对象打个标(盖个戳),使对象拥有某个或某些特权。比如,你不能杀人,如果老习给你盖个戳,你就可以杀人。使用标记接口可以用instanceof进行类型查询,例如:if(obj instanceof Cloneable) {………}

四、接口的责任

  •  java提供接口的目的就是声明一组方法供类去实现。这通常意味着实现接口的类将提供其方法的名称所暗示的服务,但是有一个例外就是,当接口用于对象注册器监听事件通知的时候,实现该接口的类就没有履行这种责任。在这种情况下,可以考虑提供一个存根(stub),存根就是用空方法体实现该接口中所有方法的类,开发者可以通过继承该存根创建一个实现该接口的类,而只重载对应的比较重要的几个方法。

五、接口中的常量

有如下的例子,定义Classification类,用该类中的常量来标识fireworks的类型:
package com.oozinoz.fireworks;
public class Classification {
public static final Classification CONSUMER = new Classification();
public static final Classification DISPLAY = new Classification();

private Classification(){} 
}
以下的代码用于检验firework的类别:
public void secureOrder(Firework f/*,etc.*/) {
//...
if(f.classification ==Classificaton.DISPLAY)
{// issue warning}
else
{// proceed}
}
此时使用接口可以使得secureOrder具有更好的可读性。具体示例如下:
package com.oozinoz.fireworks;
public class Classification{
protected Classification(){}
}

public interface ClassificationConstants {
public static final Classification CONSUMER = new Classification();
public static final Classification DISPLAY = new Classification();
}
在这个设计中,Classification类仅为Classification类型的参数提供类型检查,而ClassificationConstants接口则可 以让secureOrder方法更具有可读性,具体如下所示。为了让secureOrder对应的类能够使用类别常量,我们可 使该类实现ClassificationConstants接口。
public void secureOrder(Firework f/*,etc.*/) {
//...
if(f.classification ==DISPLAY)
{// issue warning}
else
{// proceed}
}


尽管使用java接口能够在一定程度上优化和完善我们的应用程序,但是有些时候和接口相关的设计模式也能够给 我们带来很多方便,具体和接口相关的设计模式如下:

应用目的
1.修改外部接口以满足客户期望
2.为一组类提供简单的接口
3.为单个对象和群组对象定义共同的接口
4.将实现和抽象分离一遍二者独立演化
应用模式
1.适配器模式
2.外观模式
3.组合模式
4.桥接模式




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
结构型设计模式是一种在软件设计中常用的模式,用于解决对象之间的组合和关联关系。常见的结构型设计模式包括代理模式、桥接模式、装饰器模式、适配器模式、门面模式、组合模式和享元模式。其中代理模式用于为其他对象提供一种代理,以控制对这些对象的访问。桥接模式用于将抽象和实现分离,使它们可以独立变化。装饰器模式用于动态地给对象增加额外的职责。适配器模式用于将一个类的接口转换为客户端所期望的另一个接口。门面模式用于提供一个简化的接口,隐藏复杂的子系统。组合模式用于将对象组合成树状结构,以表示"部分-整体"的层次结构。享元模式用于共享大量细粒度对象,以减少内存消耗。所以,结构型模式包括代理模式、桥接模式、装饰器模式、适配器模式、门面模式、组合模式和享元模式。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [设计模式-结构型概述(7种)](https://blog.csdn.net/qq_16465949/article/details/105894934)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [设计模式之结构型模式(5种)](https://blog.csdn.net/weixin_64987028/article/details/124259364)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值