设计模式 结构型设计模式之适配器模式

1 基础知识

1.1 标准定义

适配器模式标准定义:将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。

1.2 分析和说明

适配器模式属于结构型设计模。把一个类的接口变换成客户端所期待的另一个接口,从而使原本因接口原因不匹配而无法一起工作的两个类能够一个工作。适配器模式也叫变压器模式,也叫包装器(Wrapper)模式。

当一个类需要另一个类的方法,但是这两个类并不兼容。从实现原理上来看,达到这一目的的方法有两种:一种是继承,一种是对象组合。第一种方法中,从一个非一致性的类中派生出一个新类,并增加新的方法使派生类与所需接口匹配;第二种方法中,在新类中包含最初的类,并创建方法来解释新类中的调用,这两种方法即人们通常所俗称的类适配器和对象适配器。适配器可以采用类适配器,也可以采用对象适配器。

适配器模式结构包含的角色有目标(target)角色、源(Adaptee)角色、适配器(Adapter)角色。

目标角色:这就是所期待的接口,定义了客户所期望的操作。目标角色可以是具体类或抽象类。该角色不可缺少。

源角色:这是我们原有的产品,也是需要被适配的产品。源角色可以用接口、抽象类和具体类来实现。该角色不可缺少。

适配器角色:适配器角色是本模式的核心。Adapter对Adpatee接口与Target接口进行适配,适配器把源接口转换成目标接口,在Target目标角色与Adaptee源角色之间提供一种过渡,即把Adaptee源角色所提供的接口转换成Target目标角色所提供的接口。适配器(Adapter)角色必须是具体类。该角色不可缺少。

2 应用场景举例

比如对于公司客户和公司的设计编码开发人员直接进行交流比较困难。但中间加一个需求分析人员就把事情搞得比较简单。客户把自己的想法告诉需求分析人员,需求分析人员把用户需求转化成需求分析,并告诉设计编码人员如何进行设计和实现。需求分析人员就是一个适配器,把两个毫不联系的人员匹配起来。

在这里,把Customer类比作为目标角色,Designer类比作为源角色,Analyst类比作为适配器角色。Analyst继承Customer类并关联Designer类。



适配器模式实现的顺序描述为:(1)创建一个Customer对象; (2)创建一个Analyst对象;(3)创建一个Designer对象;(4)Customer对象调用CommitResuirement方法,给Analyst提交需求;(5)Analyst获取需求并进行分析;(6)把Designer对象赋值给Analyst,Analyst把分析后的需求给Designer对象。(7)Designer对象按照分析完成开发工作并返回给Analyst对象,Analyst对象把完成的工作给Customer对象。


3 JAVA实现程序代码

Java程序实现主要包括Custemer类文件、Analyst类文件和Designer类文件等3个文件。

Customer类文件程序代码

public class Customer {
private String customerName;
private String requirement =null;
public void setRequirement(String require){
requirement = require;
}

public String getCustomerName(){
return customerName;
}

public void setCustomerName(String name){
customerName = name;
}

public String getRequirement(){
return requirement;
}

public String commitRequirement(){
System.out.println("----用户提交需求------");
return requirement;
}
}


Analyst类文件的程序代码是

public class Analyst extends Customer{
private String analystName;
private Designer designer = null;
private String request;

public Analyst(String name){
analystName = name;
}


public String getAnalystName() {
return analystName;
}


public void setAnalystName(String analystName) {
this.analystName = analystName;
}


public Designer getDesigner() {
return designer;
}


public void setDesigner(Designer designer) {
this.designer = designer;
}


public void setRequest(String content){
request= content;
}

public String getFinishworks(){
String designs = requestToDesign();
designer.setDesigns(designs);
return designer.getFinishWork();
}

public String requestToDesign(){
System.out.println("分析员按照用户需求转化为分析和设计");
return getAnalystName()+"按照"+request+",形成需求设计内容";
}


}


Designer类文件的程序代码是

public class Designer {
private String designerName = null;
private String works = null;
private String Designs  =null;

public Designer(String name){
designerName = name;
}


public String getDesignerName() {
return designerName;
}


public void setDesignerName(String designerName) {
this.designerName = designerName;
}


public String getWorks() {
return works;
}


public void setWorks(String works) {
this.works = works;
}


public String getDesigns() {
return Designs;
}


public void setDesigns(String designs) {
Designs = designs;
}

public String getFinishWork(){
designToWorks();
return works;
}

public void designToWorks(){
System.out.println("----按照需求分析设计转化为具体工作---");
works = Designs+getDesignerName()+"按照需求设计内容,完成工作。";
}
}


适配器模式测试程序代码如下:

public class Client {
public static void main(String[] args){
Customer customer = new Customer();
customer.setCustomerName("客户小王");
customer.setRequirement("客户小王的需求 ");
Designer designer = new Designer("开发员小张");
Analyst analyst = new Analyst("分析员小刘");
//客户把用户需求提交给分析员
analyst.setRequest(customer.commitRequirement());
//分析员经过转化后提供给开发人员
analyst.setDesigner(designer);
//得到满足客户的需求的工作产品
System.out.println(analyst.getFinishworks());

}
}


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值