精华内容
参与话题
问答
  • Adapter

    2013-10-28 17:29:45
    //Adapter模式又叫适配器模式,顾名思义,这个模式就是把一个不能用的东西“适配”成可以用的东西。 //那么是如何“适配”的呢?比如,东西A想使用东西B,但是A没有能力(没法)使用B,怎么办?A就让东西C帮忙,A...

    //Adapter模式又叫适配器模式,顾名思义,这个模式就是把一个不能用的东西“适配”成可以用的东西。
    //那么是如何“适配”的呢?比如,东西A想使用东西B,但是A没有能力(没法)使用B,怎么办?A就让东西C帮忙,A通过C就可以用B了。C如何帮忙呢?
    //C一边可以通过一个“手柄”让A握住,A一用力,C就在另一边握住B的“手柄”,使用B。这样A就可以间接的使用到B了。

    //A通过C使用B
    // 1、C继承A和B C(A子类可以调用A一切函数)就能使用B了(类继承)
    // 2、C继承A B作为成员数据被引入C (类组合)

    //类模式的Adapter实现:
    #include <stdio.h>
    class Target
    {
    public:
     Target();
     virtual ~Target();
     
     virtual void Request()
     {
      printf("Target::Request");
     }
    protected:
    private:
    };

    class Adaptee //ee结尾表被动 er表主动  employ: employer,employee雇主,雇员 train: trainer, trainee训练者,受训者 address: addresser (addressor), addressee发件人,收件人

    public:
     Adaptee();
     ~Adaptee();

     void SpecificRequest()
     {
      printf("Adaptee::SpecificRequest");
     }
    protected:
    private:
    };

    class Adapter:public Target,private Adaptee
    {
    public:
     Adapter();
     ~Adapter();

     void Request()
     {
      this->SpecificRequest();
     }
    protected:
    private:
    };

    void Adapter_test1(int argc,char* argv[])
    {
     Target* adt = new Adapter(); //Adapter* adt = new Adapter();
     adt->Request();
     return ;
    }

    //对象模式的Adapter实现:
    class Target
    {
    public:
     Target();

     virtual ~Target();

     virtual void Request()
     {
      printf("Target::Request");
     }
    protected:
    private:
    };

    class Adaptee
    {
    public:
     Adaptee();

     ~Adaptee();

     void SpecificRequest()
     {
      printf("Adaptee::SpecificRequest");
     }
    protected:
    private:
    };

    class Adapter:public Target
    {
    public:
     Adapter(Adaptee* ade)
     {
      this->_ade = ade;
     }

     ~Adapter();

     void Request()
     {
      _ade->SpecificRequest();
     }
    protected:
    private:
     Adaptee* _ade;
    };

    void Adapter_test2(int argc,char* argv[])
    {
     Adaptee* ade = new Adaptee;

     Target* adt = new Adapter(ade);

     adt->Request();

     return;
    }

    展开全文
  • Design Pattern - Adapter(C#)

    万次阅读 多人点赞 2019-01-23 20:25:13
    分享一个大牛的人工智能教程。零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!... Definition Convert the interface of a class into another ... Adapter lets classes work together that ...

    分享一个大牛的人工智能教程。零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请点击http://www.captainbed.net 

    Definition

    Convert the interface of a class into another interface clients expect. Adapter lets classes work together that couldn't otherwise because of incompatible interfaces.

    Participants

        The classes and/or objects participating in this pattern are:

    • Target (ChemicalCompound)
      • Defines the domain-specific interface that Client uses.
    • Adapter (Compound)
      • Adapts the interface Adaptee to the Target interface.
    • Adaptee (ChemicalDatabank)
      • Defines an existing interface that needs adapting.
    • Client (AdapterApp)
      • Collaborates with objects conforming to the Target interface.

    Sample Code in C#


    This structural code demonstrates the Adapter pattern which maps the interface of one class onto another so that they can work together. These incompatible classes may come from different libraries or frameworks.

    // --------------------------------------------------------------------------------------------------------------------
    // <copyright company="Chimomo's Company" file="Program.cs">
    // Respect the work.
    // </copyright>
    // <summary>
    // Structural Adapter Design Pattern.
    // </summary>
    // --------------------------------------------------------------------------------------------------------------------
    namespace CSharpLearning
    {
        using System;
    
        /// <summary>
        /// Startup class for Structural Adapter Design Pattern.
        /// </summary>
        internal static class Program
        {
            #region Methods
    
            /// <summary>
            /// Entry point into console application.
            /// </summary>
            private static void Main()
            {
                // Create adapter and place a request
                Target target = new Adapter();
                target.Request();
            }
    
            #endregion
        }
    
        /// <summary>
        /// The 'Target' class
        /// </summary>
        internal class Target
        {
            #region Public Methods and Operators
    
            /// <summary>
            /// The request.
            /// </summary>
            public virtual void Request()
            {
                Console.WriteLine("Called Target Request()");
            }
    
            #endregion
        }
    
        /// <summary>
        /// The 'Adapter' class
        /// </summary>
        internal class Adapter : Target
        {
            #region Fields
    
            /// <summary>
            /// The adaptee.
            /// </summary>
            private Adaptee adaptee = new Adaptee();
    
            #endregion
    
            #region Public Methods and Operators
    
            /// <summary>
            /// The request.
            /// </summary>
            public override void Request()
            {
                // Possibly do some other work and then call SpecificRequest
                this.adaptee.SpecificRequest();
            }
    
            #endregion
        }
    
        /// <summary>
        /// The 'Adaptee' class
        /// </summary>
        internal class Adaptee
        {
            #region Public Methods and Operators
    
            /// <summary>
            /// The specific request.
            /// </summary>
            public void SpecificRequest()
            {
                Console.WriteLine("Called SpecificRequest()");
            }
    
            #endregion
        }
    }
    
    // Output:
    /*
    Called SpecificRequest()
    */

    This real-world code demonstrates the use of a legacy chemical databank. Chemical compound objects access the databank through an Adapter interface.

    // --------------------------------------------------------------------------------------------------------------------
    // <copyright company="Chimomo's Company" file="Program.cs">
    // Respect the work.
    // </copyright>
    // <summary>
    // Real-World Adapter Design Pattern.
    // </summary>
    // --------------------------------------------------------------------------------------------------------------------
    namespace CSharpLearning
    {
        using System;
    
        /// <summary>
        /// Startup class for Real-World Adapter Design Pattern.
        /// </summary>
        internal static class Program
        {
            #region Methods
    
            /// <summary>
            /// Entry point into console application.
            /// </summary>
            private static void Main()
            {
                // Non-adapted chemical compound
                var unknown = new Compound("Unknown");
                unknown.Display();
    
                // Adapted chemical compounds
                Compound water = new RichCompound("Water");
                water.Display();
                Compound benzene = new RichCompound("Benzene");
                benzene.Display();
                Compound ethanol = new RichCompound("Ethanol");
                ethanol.Display();
            }
    
            #endregion
        }
    
        /// <summary>
        /// The 'Target' class
        /// </summary>
        internal class Compound
        {
            #region Fields
    
            /// <summary>
            /// The chemical.
            /// </summary>
            protected readonly string Chemical;
    
            /// <summary>
            /// The boiling point.
            /// </summary>
            protected float BoilingPoint;
    
            /// <summary>
            /// The melting point.
            /// </summary>
            protected float MeltingPoint;
    
            /// <summary>
            /// The molecular formula.
            /// </summary>
            protected string MolecularFormula;
    
            /// <summary>
            /// The molecular weight.
            /// </summary>
            protected double MolecularWeight;
    
            #endregion
    
            // Constructor
            #region Constructors and Destructors
    
            /// <summary>
            /// Initializes a new instance of the <see cref="Compound"/> class.
            /// </summary>
            /// <param name="chemical">
            /// The chemical.
            /// </param>
            public Compound(string chemical)
            {
                this.Chemical = chemical;
            }
    
            #endregion
    
            #region Public Methods and Operators
    
            /// <summary>
            /// The display.
            /// </summary>
            public virtual void Display()
            {
                Console.WriteLine("\nCompound: {0} ------ ", this.Chemical);
            }
    
            #endregion
        }
    
        /// <summary>
        /// The 'Adapter' class
        /// </summary>
        internal class RichCompound : Compound
        {
            #region Fields
    
            /// <summary>
            /// The bank.
            /// </summary>
            private ChemicalDatabank bank;
    
            #endregion
    
            // Constructor
            #region Constructors and Destructors
    
            /// <summary>
            /// Initializes a new instance of the <see cref="RichCompound"/> class.
            /// </summary>
            /// <param name="name">
            /// The name.
            /// </param>
            public RichCompound(string name)
                : base(name)
            {
            }
    
            #endregion
    
            #region Public Methods and Operators
    
            /// <summary>
            /// The display.
            /// </summary>
            public override void Display()
            {
                // The Adaptee
                this.bank = new ChemicalDatabank();
                this.BoilingPoint = this.bank.GetCriticalPoint(this.Chemical, "B");
                this.MeltingPoint = this.bank.GetCriticalPoint(this.Chemical, "M");
                this.MolecularWeight = this.bank.GetMolecularWeight(this.Chemical);
                this.MolecularFormula = this.bank.GetMolecularStructure(this.Chemical);
                base.Display();
                Console.WriteLine(" Formula: {0}", this.MolecularFormula);
                Console.WriteLine(" Weight : {0}", this.MolecularWeight);
                Console.WriteLine(" Melting Pt: {0}", this.MeltingPoint);
                Console.WriteLine(" Boiling Pt: {0}", this.BoilingPoint);
            }
    
            #endregion
        }
    
        /// <summary>
        /// The 'Adaptee' class
        /// </summary>
        internal class ChemicalDatabank
        {
            // The databank 'legacy API'
            #region Public Methods and Operators
    
            /// <summary>
            /// The get critical point.
            /// </summary>
            /// <param name="compound">
            /// The compound.
            /// </param>
            /// <param name="point">
            /// The point.
            /// </param>
            /// <returns>
            /// The <see cref="float"/>.
            /// </returns>
            public float GetCriticalPoint(string compound, string point)
            {
                // Melting Point
                if (point == "M")
                {
                    switch (compound.ToLower())
                    {
                        case "water":
                            return 0.0f;
    
                        case "benzene":
                            return 5.5f;
    
                        case "ethanol":
                            return -114.1f;
    
                        default:
                            return 0f;
                    }
                }
    
                switch (compound.ToLower())
                {
                    case "water":
                        return 100.0f;
    
                    case "benzene":
                        return 80.1f;
    
                    case "ethanol":
                        return 78.3f;
    
                    default:
                        return 0f;
                }
            }
    
            /// <summary>
            /// The get molecular structure.
            /// </summary>
            /// <param name="compound">
            /// The compound.
            /// </param>
            /// <returns>
            /// The <see cref="string"/>.
            /// </returns>
            public string GetMolecularStructure(string compound)
            {
                switch (compound.ToLower())
                {
                    case "water":
                        return "H2O";
    
                    case "benzene":
                        return "C6H6";
    
                    case "ethanol":
                        return "C2H5OH";
    
                    default:
                        return string.Empty;
                }
            }
    
            /// <summary>
            /// The get molecular weight.
            /// </summary>
            /// <param name="compound">
            /// The compound.
            /// </param>
            /// <returns>
            /// The <see cref="double"/>.
            /// </returns>
            public double GetMolecularWeight(string compound)
            {
                switch (compound.ToLower())
                {
                    case "water":
                        return 18.015;
    
                    case "benzene":
                        return 78.1134;
    
                    case "ethanol":
                        return 46.0688;
    
                    default:
                        return 0d;
                }
            }
    
            #endregion
        }
    }
    
    // Output:
    /*
    
    Compound: Unknown ------
    Compound: Water ------
     Formula: H2O
     Weight : 18.015
     Melting Pt: 0
     Boiling Pt: 100
    
    Compound: Benzene ------
     Formula: C6H6
     Weight : 78.1134
     Melting Pt: 5.5
     Boiling Pt: 80.1
    
    Compound: Ethanol ------
     Formula: C2H5OH
     Weight : 46.0688
     Melting Pt: -114.1
     Boiling Pt: 78.3
    */
    展开全文
  • adapter

    千次阅读 2006-07-06 09:38:00
    针对同一数据库的不同表的,最好new不同的adapter .虽然命令不同,但可能造成预想不到的错误.教训啊!

    针对同一数据库的不同表的,最好new不同的adapter .虽然命令不同,但可能造成预想不到的错误.

    教训啊!

    展开全文
  • 自定义Adapter

    千次阅读 2017-03-19 21:02:54
    在进行安卓开发的时候使用arrayadapter和simpleadapter显示数据的方式比较固定,如果我们想对listview进行更加丰富的展示,那么我们就要使用自定义adapter了,比如说使用自定义adapter可以实现item单双行背景颜色不...

    在进行安卓开发的时候使用arrayadapter和simpleadapter显示数据的方式比较固定,如果我们想对listview进行更加丰富的展示,那么我们就要使用自定义adapter了,比如说使用自定义adapter可以实现item单双行背景颜色不同等,那么 我们就来看看如何自定义adapter吧

    首先展示一张自定义adapter的步骤图(自己写的)


    使用自定义adapter可以实现展示数据更加丰富的listview,我这里就暂且定位自定义listview了,首先第一步我们需要创建一个数据模型,这个数据模型通常是一个数据类,比如说的listview要展示一些用户的信息,那么你就要定义一个用户类,包含了用户的各个属性,我这里暂且定义了一个people类,如下

    public class People {
        private String name;
        private String sex;
        private  int image;
        private String hobby;
        public int getImage() {
            return image;
        }
        public String getHobby() {
            return hobby;
        }
        public String getName() {
            return name;
        }
        public String getSex() {
            return sex;
        }
        public People(String name,String sex,int image,String hobby){
            this.name = name;
            this.image = image;
            this.sex = sex;
            this.hobby = hobby;
        }
    }

    由以上代码可以看出我们定义了一个数据类people类,包含了一个人的姓名,性别,头像和爱好,那么紧接着第二步我们要定义一个数据的布局样式,也即是创建一个xml文件用来显示数据,如何显示就如何设置这个布局,如下

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:background="#848282">
        <ImageView
            android:layout_width="50dp"
            android:layout_height="match_parent"
            android:id="@+id/item_icon"
            android:src="@mipmap/ic_launcher"/>
        <TextView
            android:layout_width="50dp"
            android:layout_height="match_parent"
            android:text="张三"
            android:textSize="24sp"
            android:gravity="center"
            android:id="@+id/item_name"/>
        <TextView
            android:id="@+id/item_sex"
            android:layout_width="50dp"
            android:layout_height="match_parent"
            android:layout_marginLeft="10dp"
            android:text="男"
            android:textSize="24sp"
            android:gravity="center"
            android:textColor="#e41515"/>
        <TextView
            android:layout_width="200dp"
            android:layout_height="match_parent"
            android:text="喜欢打游戏"
            android:textSize="20sp"
            android:id="@+id/item_hobby"/>
    </LinearLayout>
    

    进行到这里我们就来到最重要的一步自定义adapter,这个步骤是要求我们创建一个类继承baseadapter,需要我们重写它的四个抽象方法,最重要的是他的getview方法代码如下

    public class MyAdapter extends BaseAdapter {
        private int[] colors = new int[] { 0xff3cb371, 0xffa0a0a0 };
        //创建数据
        private List<People> mData;
        //创建布局管理器
        private LayoutInflater inflater;
        public MyAdapter(LayoutInflater inflater,List<People>data){
            this.mData = data;
            this.inflater = inflater;
        }
        @Override
        public int getCount() {
            return mData.size();
        }
    
        @Override
        public Object getItem(int position) {
            return position;
        }
    
        @Override
        public long getItemId(int position) {
            return position;
        }
    
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
    
            //获得listview中的view,也即是每一个item
            View view = inflater.inflate(R.layout.itemlistview,null);
            //获得一个自定义数据对象
            People people = mData.get(position);
            //获得自定义布局中每一个控件对象
            ImageView item_icon = (ImageView)view.findViewById(R.id.item_icon);
            TextView item_name = (TextView)view.findViewById(R.id.item_name);
            TextView item_sex = (TextView)view.findViewById(R.id.item_sex);
            TextView item_hobby = (TextView)view.findViewById(R.id.item_hobby);
            //将数据一一添加到自定义的布局中
            item_hobby.setText(people.getHobby());
            item_icon.setImageResource(people.getImage());
            item_name.setText(people.getName());
            item_sex.setText(people.getSex());
            int colorPos = position % colors.length;
            view.setBackgroundColor(colors[colorPos]);
            return view;
        }
    }
    
    要很好的掌握自定义adapter我觉得我们需要对这四个抽象方法与一个清楚地了解,接下来让我们一同看一下这四个抽象方法吧

    第一个是getCount,这个方法是什么意思呢,count是总数的意思,所以这个方法代表获得数据的总数量,第二个方法和第三个方法我们直接返回position即可,最重要的是第四个方法getview方法,这个方法是整个自定义adapter的核心,它返回的是自定义布局中的每一个item的view,我们需要在这个方法中获得listview中的view,也即是每一个item,获得自定义布局中的每一个控件对象以及将数据一一添加到自定义的布局中,具体的大家可以仔细研究一下上面的代码,adapter是连接前端显示和后台数据的一个桥梁,所以我们在自定义adapter的时候也要重点处理布局(前端显示)和数据(后台数据)两部分内容,数据我们采用list集合,而集合中的每一项数据就是我们自定义的数据类的一个对象,这里是我们定义的people类。

    以上代码显示的最终效果是











    展开全文
  • Android进阶(十四)Android Adapter详解

    万次阅读 2015-06-15 09:21:43
    因为layout五花八门,很多数据都不能直接绑定上去,所以Android引入了Adapter这个机制作为复杂数据展示的转换载体,所以各种Adapter只不过是转换的方式和能力不一样而已。 Adapter是将数据绑定到UI界面上的桥接类。...
  • 2.RecyclerView合并两个Adapter为一个adapter 2.RecyclerView合并两个Adapter为一个adapter 2.RecyclerView合并两个Adapter为一个adapter
  • Adapter模式

    2019-07-03 15:05:07
    一、Adapter 生活中像什么充电头啊,USB转换器啊等都是适配器,那么在工作中比如我们有一个日期转换类需要yyyy-MM-dd格式的参数,但是我们接受到的是yyyyMMdd参数所以我们需要自己抽象出一个类将yyyyMMdd转换成yyyy...
  • ListView 和 Adapter 适配器的简单介绍

    万次阅读 多人点赞 2018-05-27 20:13:59
    1、ListView组件 ...1)只有通过Adapter 才可以把列表中的数据映射到ListView 中。 2)种类: ArrayAdapter, BaseAdapter, CursorAdapter , HeaderViewAdapter, ResourceCursorAdapter, Sim...
  • 为RecyclerView打造通用Adapter 让RecyclerView更加好用

    万次阅读 多人点赞 2016-04-11 09:17:42
    转载请标明出处: ...一、概述记得好久以前针对ListView类控件写过一篇打造万能的ListView GridView 适配器,如今RecyclerView异军突起,其Adapter的用法也与ListView类似,那么我们也可以一步一步的为其打
  • Android-UI开发之AdapterAdapter控件

    千次阅读 2017-06-16 16:06:43
    Adapter android
  • 文章目录Adapter适配器概述关于视图重用关于ViewHolder使用步骤base-adapter-helper库的使用1.导入库2.将库中的java文件复制到项目中3.编译并解决问题4.使用 Adapter适配器 概述 Adapter是连接后端数据和前端显示的...
  • 设计模式(五)适配器模式Adapter(结构型)

    万次阅读 多人点赞 2012-05-02 16:02:58
    设计模式(五)适配器模式Adapter(结构型) 1. 概述: 接口的改变,是一个需要程序员们必须(虽然很不情愿)接受和处理的普遍问题。程序提供者们修改他们的代码;系统库被修正;各种程序语言以及相关库的发展和...
  • Adapter 1

    2014-11-13 12:57:15
    Adapter介绍 Android是完全遵循MVC模式设计的框架,Activity是Controller,layout是View 因为layout五花八门,很多数据都不能直接绑定上去,所以Android引入了Adapter这个机制作为复杂数据的展示的转换载体,所以...
  • android adapter

    千次阅读 2014-04-27 12:40:33
    Adapter是将数据绑定到UI界面上的桥接类。Adapter负责创建显示每个项目的子View和提供对下层数据的访问。   支持Adapter绑定的UI控件必须扩展AdapterView抽象类。创建自己的继承自AdapterView的控件和创建新...
  • GridViewAdapter

    千次阅读 2017-02-08 15:19:05
    留着以后备用/** * Created by pig on 2017/2/7. ... public class GridViewAdapter extends BaseAdapter{ private Context context; private List<ResultBeanData.ResultBean.ChannelInfoBean> channel_info;
  • Adapter Pattern

    2013-07-20 06:08:46
    http://www.oodesign.com/adapter-pattern.html Adapter Pattern Motivation ...The adapter pattern is adapting between classes and objects. Like any adapter in the real world it is use
  • Android - Adapter 适配器

    千次阅读 2020-11-21 10:43:07
    Android 适配器 本文只介绍两个Adapter: ArrayAdapter:最简单的Adapter,只能展现一行文字。 BaseAdapter:最多使用的Adapter,实际开发中继承这个类重写相关方法。
  • Adapter详解

    千次阅读 2013-07-01 01:08:18
    Adapter是适配器,许多UI组件需要搭配Adapter来显示界面,例如Spinner与ListView,另外当我们需要动态的添加数据给UI组件时就需要Adapter了。 我们来介绍几个常见的Adapter: ArrayAdapter(comman) SimpleAdapter ...
  • ListView嵌套了GridView但是在ListView的Adapter中给GreidView设置adapter时会抛出异常,API19。手里还有一版API24正常运行。 报错日志 /AndroidRuntime: FATAL EXCEPTION: main Process: com.unicom.domain, PID...
  • Adapter 里定义了接口,并在 Activity 里实现该接口,接口方法更新了传入该 Adapter 的 List,于是在接口实现方法里我 new 了一个新的 Adapter 并把新的 List 作为参数传入,然后刷新适配器 报错:日志显示 ...
  • adapter是数据与ui之间的桥梁,它把后台数据与前端ui连接到一起,是一个展示数据的载体。 常用的adapter: BaseAdapter : 基础适配器,对于spinner listview gridview 都是通用的,它是一个抽象类,继承后要实现的...
  • Adapter类型控件之Adapter(数据适配器)

    千次阅读 2016-06-24 21:52:33
    Adapter是作为连接数据跟View之间桥梁的,你可以创建一个View来使用Adapter来对数据直接进行填充; (二)Adapter(适配器)的使用 先来看看他的类结构图: 实际开发中经常用到的那几个Adapter: 用到,不过...
  • Interface Adapter

    2013-07-17 22:25:21
    public interface Adapter: (所在包)android.widget.Adapter Known Indirect Subclasses(已知的间接子类) ArrayAdapter, BaseAdapter, CursorAdapter, HeaderViewListAdapter, ListAdapter, ...
  • RROR: Could not create cache adapter error=cache factory not found: factory for cache adapter "" was not registered ERROR: Job failed (system failure): Error response from daemon: OCI runtime create ...

空空如也

1 2 3 4 5 ... 20
收藏数 73,858
精华内容 29,543
关键字:

adapter