`
Supanccy2013
  • 浏览: 224057 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

适配器(类适配器、对象适配器模式)

阅读更多
一:类适配器模式
  
     假如我们有一个Person类,这个Person类中有吹,拉方法。在系统开发到一半我们发现我们需要该类再添加两个方法弹、唱,以便实现吹、拉、弹、唱的功能。但纵观全系统,弹、唱功能只是临时使用的一次。并且Person类在全系统中已经设计合理,我们不想再去改变该类的行为。这个时候怎么办呢?别急,类适配器模式可以解决此类问题。
     也许你会说,为什么不直接在“源”中直接添加方法,答案是,适配是为了实现某种目的而为一个源类暂时性的加上某种方法,所以不能破坏原类的结构。同时不这么做也符合Java的高内聚,低耦合的原理。既然不能直接加,接着我们就来说该怎么来实现为人这个Person“源”添加弹、唱方法,而又不破坏“源”的本身结构。下面粘上源代码:
1,类适配器的目标功能(用接口来实现目标功能)
  package com.supan.shipeiqi;
  public interface Target {
    //这是类适配器模式中的目标实现接口
	public void chui();
	public void la();
	public void tan();
	public void chang();
   }

2,普通的类Person,该类在日常使用中需要添加一些方法,但又不想改变此类。
   package com.supan.shipeiqi;
   public class Person {
	private String name;
	private int age;
	public void chui(){
		System.out.println("我会吹,来自源对象的方法");
	}
    public void la(){
    	System.out.println("我会拉,来自源对象的方法");
    }
   }

3,适配器类,该类以Person为基础,在此基础上添加一些需要的方法,注意该类集成了
   Person也就是说,该类是Person的子类,拥有了Person的所有属性,可以任意操纵Person
   的属性,所以在此类中添加一些方法也就可以随意增加Person行为,实现适配的目标,这
   个类也是类适配器模式中经典核心类

   package com.supan.shipeiqi;
   public class PersonAdapter extends Person implements Target {
	public void tan() {
		System.out.println("我会弹,来自适配器中的方法");
	}
	public void chang() {
		System.out.println("我会唱,来自适配器中的方法");
	}
   }

4,测试类
   package com.supan.shipeiqi;
   public class ClassAdapterTest {
	public static void main(String[] args) {
		PersonAdapter pd = new PersonAdapter();
		pd.chui();
		pd.la();
		pd.tan();
		pd.chang();
	}
   }

5,打印结果
   我会吹,来自源对象的方法
   我会拉,来自源对象的方法
   我会弹,来自适配器中的方法
   我会唱,来自适配器中的方法

   代码看完然后要做一些说明了,为什么称其为类适配模式呢?很显然的,Adapter类继承了Person类,而在Java这种单继承的语言中也就意味着,他不可能再去继承其他的类了,这样也就是这个适配器只为Person这一个类服务。所以称其为类适配模式。
   说完类的适配模式,开始说第2种对象的适配器模式了。对象适配器模式是把“源”作为一个对象聚合到适配器类中。

二:对象适配器模式
1,目标接口
   package com.supan.shipeiqi;
   public interface Target {
    //这是类适配器模式中的目标实现接口
	public void chui();
	public void la();
	public void tan();
	public void chang();
   }

2,Person源类
   package com.supan.shipeiqi;
   public class Person {
private String name;
private int age;
public void chui(){
System.out.println("我会吹,来自源对象的方法");
}
    public void la(){
    System.out.println("我会拉,来自源对象的方法");
    }
   }
3,对象适配器类,该类是核心类(注意与类适配器类的区别)
   package com.supan.shipeiqi;
   public class PersonAdapter2 implements Target {
	private Person p;
	public PersonAdapter2(Person p) {
        this.p = p; 
	}
	public void chui() {
		p.chui();
	}
	public void la() {
        p.la();		
	}
	public void tan() {
        System.out.println("我会弹,该方法来自适配器");
	}
	public void chang(){
		System.out.println("我会唱,该方法来自适配器");
	}
   }
   

4,测试类:
  package com.supan.shipeiqi;
  public class ObjectAdapterTest {
	public static void main(String[] args) {
		Person p = new Person();
		PersonAdapter2 pa2 = new PersonAdapter2(p);
		pa2.chui();
		pa2.la();
		pa2.tan();
		pa2.chang();
	}
   }

5,输出:
我会吹,来自源对象的方法
我会拉,来自源对象的方法
我会弹,该方法来自适配器
我会唱,该方法来自适配子
 

三:关于类适配器模式、对象适配器模式的一点思考:
   1.类的适配模式用于单一源的适配,由于它的源的单一话,代码实现不用写选择逻辑,很清晰;而对象的适配模式则可用于多源的适配,弥补了类适配模式的不足,使得原本用类适配模式需要写很多适配器的情况不复存在,弱点是,由于源的数目可以较多,所以具体的实现条件选择分支比较多,不太清晰。

   2.适配器模式主要用于几种情况:
     (1)系统需要使用现有的类,但现有的类不完全符合需要。
     (2)讲彼此没有太大关联的类引进来一起完成某项工作(指对象适配)。
   
分享到:
评论

相关推荐

    JAVA设计模式(抽象类与适配器模式)

    类适配器模式通过继承目标接口和适配者类来实现,而对象适配器模式则是通过组合适配者类来实现。适配器模式常用于旧系统改造或者第三方库的接口调整,它降低了系统的耦合度,增加了系统的灵活性。 以一个具体的例子...

    设计模式之适配器模式Java实现和类设计图

    在这个Java实现中,我们将深入探讨适配器模式的两大类型:类适配器模式和对象适配器模式,并通过具体的代码示例和UML类图来阐述其工作原理。 首先,我们来理解适配器模式的基本概念。适配器模式就像现实生活中的...

    类适配器, 对象适配器模式,缺省适配器模式1

    适配器模式分为类适配器模式和对象适配器模式,还有缺省适配器模式。 1. **类适配器模式**: 在类适配器模式中,适配器类通过继承被适配类(Adaptee)并实现目标接口(Target)。这种方式下,适配器和被适配类之间...

    设计模式之适配器模式

    在Java中,适配器模式主要分为两种类型:类适配器模式和对象适配器模式。类适配器模式通过继承目标接口和被适配者类来实现,而对象适配器模式则通过包含被适配者对象并实现目标接口来完成适配过程。 1. 类适配器...

    java设计模式之适配器模式

    适配器模式可以分为类适配器和对象适配器两种类型。 1. 类适配器:适配器类继承自目标接口,并且包含一个被适配类的实例。 2. 对象适配器:适配器类通过组合的方式包含被适配类的引用,而不是继承。 二、适配器...

    设计模式 - 适配器模式(C++实例)

    在C++中,适配器模式主要有两种实现方式:类适配器和对象适配器。类适配器模式是通过多重继承来实现的,而对象适配器模式则通过组合来实现。下面我们详细探讨这两种方式。 1. 类适配器模式: 在类适配器模式中,...

    23种设计模式--适配器模式

    适配器模式主要有两种形式:对象适配器和类适配器。对象适配器通过组合的方式实现接口转换,而类适配器则是通过继承来完成。 1. **对象适配器**: 在对象适配器模式中,适配器类持有一个对原始接口实现对象的引用...

    java设计模式;适配器模式(类)

    // 创建适配器对象 target.request(); // 调用适配后的方法 } } ``` 在这个例子中,`Adaptee`是不兼容的类,`Target`是客户端需要的接口,`Adapter`作为适配器类,通过继承`Adaptee`并实现`Target`接口,使得...

    设计模式适配器模式PPT学习教案.pptx

    适配器模式分为类适配器和对象适配器两种形式。 在类适配器模式中,适配器类直接继承自需要适配的类(Adaptee),同时实现目标接口(Target)。这样,适配器类不仅拥有被适配类的所有行为,还能提供符合目标接口的...

    Java设计模式之适配器模式

    适配器模式主要分为两种类型:类适配器和对象适配器。 1. **类适配器**:通过继承适配者类来实现适配。这意味着适配器类既是目标接口的实现,也是适配者类的子类。这种方式的优点是可以重用适配者的所有功能,但在...

    java 动态代理模式 适配器模式

    类适配器模式通过继承目标接口和适配类来实现,而对象适配器模式则通过包含适配类对象并实现目标接口来达到目的。适配器模式使得旧的代码可以与新的系统无缝对接,避免了大量重复代码的编写,提高了代码的复用性。 ...

    java中适配器模式案例

    类适配器模式是通过继承目标接口(需要适配的接口)和被适配类(原始不兼容的类)来实现的,而对象适配器模式则是通过持有被适配类的实例,并实现目标接口来达到目的。 在Java中,适配器模式的核心组件包括: 1. ...

    适配器模式源代码

    适配器模式主要有三种形式:类适配器、对象适配器和接口适配器。在这个实例中,我们可能会看到其中的一种或多种形式的实现。 1. 类适配器模式:适配器类直接继承被适配者,并实现目标接口。这种方式下,适配器和被...

    适配器模式案例代码

    适配器模式主要有两种形式:类适配器模式和对象适配器模式。在类适配器模式中,适配器类继承自目标接口,并包含一个原始不兼容接口的对象。而在对象适配器模式中,适配器类通过组合(拥有)原始接口的对象来实现目标...

    面向对象开发模式 适配器模式

    适配器模式有两种实现方式:类适配器和对象适配器。 - 类适配器模式是通过继承源类(Adaptee Class)并实现目标接口来实现的。当客户对象调用适配器类的方法时,适配器会通过继承关系调用适配者类的方法。 例如,...

    设计模式之--适配器模式

    对象适配器模式则通过组合来实现,适配器类包含一个原始类的对象,并实现目标接口。 适配器模式的优点包括: 1. 可重用性:适配器使得原本不兼容的类可以协同工作,提高了代码的复用性。 2. 灵活性:添加新的适配器...

Global site tag (gtag.js) - Google Analytics