adapter

第7讲:Adapter 适配器模式

梦想与她 提交于 2020-02-10 04:43:20
2006.1.5 李建忠 适配(转换)的概念无处不在 适配,即在不改变原有实现的基础上,将原先不兼容的接口转换为兼容的接口。 动机(Motivation) 在软件系统中,由于应用环境的变化,常常需要将“一些现存的对象”放在新的环境中应用,但是新环境要求的接口是这些现存对象所不满足的。 如何应对这种“迁移的变化”?如何既能利用现有对象的良好实现,同时又能满足新的应用环境所要求的接口? 意图(Intent) 将一个类的接口转换成客户希望的另一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。 ——《设计模式》GoF 例说Adapter应用 这种实际上是一种委派的调用,本来是发送请求给MyStack,但是MyStack实际上是委派给list去处理。MyStack在这里其实就是Adapter(适配对象),list即是Adaptee(被适配的对象),而IStack就是客户期望的接口。 结构(Structure) 适配器有两种结构 -对象适配器(更常用) 对象适配器使用的是对象组合的方案,它的Adapter核Adaptee的关系是组合关系,即上面例子中MyStack和list是组合关系。 OO中优先使用组合模式,组合模式不适用再考虑继承。因为组合模式更加松耦合,而继承是紧耦合的,父类的任何改动都要导致子类的改动。 上面的例子就是对象适配器。 -类适配器

设计模式---接口隔离模式之适配器模式(Adapter)

会有一股神秘感。 提交于 2020-02-10 04:41:31
一:概念 通过Adapter模式可以改变已有类(或外部类)的接口形式 二:动机 在软件系统中,由于应用环境的变化,常常需要将“一些现存的对象”放在新的环境中应用,但是新环境要求的接口是这些现存对象所不满足的。 如何应对这种“迁移的变化”?如何既能利用现有对象的良好实现,同时又能满足新的应用环境所要求的接口? 生活中如电源适配器,vga转换线等,适配器模式可以通过将旧的类接口转化为新接口,从而解决新环境要求的接口问题。 三:模式定义 将一个类的接口转换成客户希望的另一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。                                        --《设计模式》Gof 四:类图(结构) 五:代码讲解 //目标接口(新接口) class ITarget{ public: virtual void process()=0; }; //遗留接口(老接口) class IAdaptee{ public: virtual void foo(int data)=0; virtual int bar()=0; }; //遗留类型,符合老的接口 class OldClass: public IAdaptee{ //.... }; //对象适配器 class Adapter: public ITarget{ //继承

8、【设计模式】适配器模式

感情迁移 提交于 2020-02-10 03:59:00
  适配器就是一种适配中间件,它存在于不匹配的二者之间,用于连接二者,将不匹配变得匹配,简单点理解就是平常所见的转接头,转换器之类的存在。   适配器模式有两种:类适配器、对象适配器、接口适配器   前二者在实现上有些许区别,作用一样,第三个接口适配器差别较大。 1、类适配器模式:   原理:通过继承来实现适配器功能。   当我们要访问的接口A中没有我们想要的方法 ,却在另一个接口B中发现了合适的方法,我们又不能改变访问接口A,在这种情况下,我们可以定义一个适配器p来进行中转,这个适配器p要实现我们访问的接口A,这样我们就能继续访问当前接口A中的方法(虽然它目前不是我们的菜),然后再继承接口B的实现类BB,这样我们可以在适配器P中访问接口B的方法了,这时我们在适配器P中的接口A方法中直接引用BB中的合适方法,这样就完成了一个简单的类适配器。   详见下方实例:我们以ps2与usb的转接为例 ps2接口:Ps2 1 public interface Ps2 { 2 void isPs2(); 3 } USB接口:Usb 1 public interface Usb { 2 void isUsb(); 3 } USB接口实现类:Usber 1 public class Usber implements Usb { 2 3 @Override 4 public void isUsb()

php 设计模式之适配器模式

会有一股神秘感。 提交于 2020-02-10 03:15:58
一、意图 将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原来由于接口不兼容而不能一起工作的那此类可以一起工作 二、适配器模式结构图 三、适配器模式中主要角色 目标(Target)角色:定义客户端使用的与特定领域相关的接口,这也就是我们所期待得到的 源(Adaptee)角色:需要进行适配的接口 适配器(Adapter)角色:对Adaptee的接口与Target接口进行适配;适配器是本模式的核心,适配器把源接口转换成目标接口,此角色为具体类 四、适配器模式适用场景 1、你想使用一个已经存在的类,而它的接口不符合你的需求 2、你想创建一个可以复用的类,该类可以与其他不相关的类或不可预见的类协同工作 3、你想使用一个已经存在的子类,但是不可能对每一个都进行子类化以匹配它们的接口。对象适配器可以适配它的父类接口(仅限于对象适配器) 五、类适配器模式与对象适配器 类适配器: Adapter与Adaptee是继承关系 1、用一个具体的Adapter类和Target进行匹配。结果是当我们想要一个匹配一个类以及所有它的子类时,类Adapter将不能胜任工作 2、使得Adapter可以重定义Adaptee的部分行为,因为Adapter是Adaptee的一个子集 3、仅仅引入一个对象,并不需要额外的指针以间接取得adaptee 对象适配器: Adapter与Adaptee是委托关系

ListView和Adapter

别等时光非礼了梦想. 提交于 2020-02-10 02:08:55
ListView控件和Adapter 这次的作业是利用ListView和自定义Adapter完成列表信息的显示,首先 用ListView在XML中定义如下: <ListView android:id="@+id/Listview" android:layout_width="fill_parent" android:layout_height="fill_parent"> </ListView> 另一个listview_xml的布局: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="match_parent"> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content

ListView和Adapter

假如想象 提交于 2020-02-10 02:06:37
这次的任务是使用ListView和Adapter完成列表信息显示,界面如图所示。 xml代码: <TextView android:id="@+id/age" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="20sp"/> <TextView android:id="@+id/mail" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="20sp" /> <TextView android:id="@+id/address" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="20sp" /> </LinearLayout> 其效果图如下: JAVA代码: @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R

Android ListView 适配器(Adapter)优化

假如想象 提交于 2020-02-10 02:01:12
本文也是转载的,以留着备用。 Adapter 的作用就是 ListView 界面与数据之间的桥梁,当列表里的每一项显示到页面时,都会调用Adapter的getView方法返回一个View。 优化的思路两种: 1. View的重用 View的每次创建是比较耗时的,因此 对于 getview方法传入的 convertView应充分利用 != null的判断 2. ViewHolder的应用 View的 findViewById ()方法也是比较耗时的,因此需要考虑只调用一次,之后就用View.getTag()方法来获得ViewHolder对象 下面是优化后的代码供参考: 1 public class MyAdapter extends BaseAdapter { 2 private Context mContext; 3 private LayoutInflater mInflater; 4 5 public MyAdapter(Context context) { 6 this.mContext = context; 7 mInflater = LayoutInflater.from(mContext); 8 } 9 10 public int getCount() {11 12 return mmsList.size();13 }14 15 public Object

[Android]ListView控件之Adapter性能优化

我的梦境 提交于 2020-02-10 01:59:43
Google在Google I/O大会上,提到Android在UI优化方面可以从以下五个方面入手: Adapter优化 背景和图片优化 绘图优化 视图和布局优化 内存分配优化 1.Adapter优化 在ListView中,我们可以自定义Adapter,继承BaseAdapter,再重写相应的方法, 但需要特别注意,ListView的每一项视图加载都要经过getView这个方法,所以优化adapter 也就在此方法。 方案一: 1 @Override 2 public View getView(int position, View convertView, ViewGroup parent) { 3 // TODO Auto-generated method stub 4 5 convertView = mInflater.inflate(R.layout.img_listview_item, null); 6 holder.imgIv = (ImageView)convertView.findViewById(R.id.imageView1); 7 holder.itemTv = (TextView)convertView.findViewById(R.id.textView1); 8 holder.imgIv.setImageResource(R.drawable.icon);

ListView和Adapter

一曲冷凌霜 提交于 2020-02-10 01:29:05
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context=".MainActivity" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="lv快速入门" /> <ListView android:id="@+id/lv" android

java design pattern - adapter pattern

一曲冷凌霜 提交于 2020-02-08 13:21:58
场景 适配器模式 总结 参考资料 场景 在编程中我们经常会遇到驴头不对马嘴的情况,比如以前是继承A的接口的对象,现在外部调用的时候需要该对象已B接口的形式来调用 ,这个时候我们可以让对象同时集成A和B接口来达到目的,不过,这样又违反了开闭原则,这个时候我们可以使用适配器模式来达到目的。 适配器模式 适配器模式是一种结构模式,可以帮助我们把对象以不同的接口方式来调用。主要由3个角色组成: Target 外部调用要求的接口方式 Adapter 中间用来协调的适配器 Adaptee 原始对象 首先,我们让Adapter继承实现Target接口,其次在Adapter中构造Adaptee对象,然后在Target方法中调用Adaptee中相应的方法。过程非常简单。 下面是适配器模式的一个简单实现: public interface Target { void request(); 大专栏 java design pattern - adapter pattern} public class Adaptee { public void doSomething() { System.out.println("Adaptee doSomething!!!"); } } public class Adapter implements Target { private Adaptee adaptee;