亡羊补牢的方法---适配器模式

        我们在VS2010环境中,经常从数据库中查询数据并返回给DataSet,然后绑定前台显示。他们都知道它的原理吗?实际上在这个过程当中,数据做了一次转换。我们后天先不管你是Sqlserver、DB2、Oracle等数据库,它先将数据查询出来并返回到DataAdapter中,然后由DataAdapter转换成DataSet;所以,我们在前台操作的时候根本不用去关心是哪种数据库。这个地方DataAdapter就是中间转换器,这个地方就用到了我们的要讲的设计模式---适配器模式。

       什么是适配器模式?将一个类的接口转化成客户希望的另外一个接口,Adapter模式使得由于接口不兼容而不能一起工作的那些类可以一起工作。就是说,使用一个已经存在的类,但如果他的接口,它的方法和你要求的不相同的时候,就需要考虑用适配器模式;目的是为了方便统一的调用。(针对两类所做的事情相似,但在实际项目中难于修改的)。


 Target是用户期望调用的接口,可以是具体的类、抽象类或者接口:

class Target
{
	public virtual void Request()
	{
		Console.WriteLine("一般请求");
	}
}
需要适配的类(Adaptee):

class Adaptee
{
	public virtual void SpecificRequest()
	{
		Console.WriteLine("特殊请求");
	}
}

Adapter类里面存储一个需要装换的类对象,并在继承重写方法的时候转换成对应的方法进行调用:

class Adapter:Target
{
    //建立一个需要适配的类对象
    private Target a=new Adaptee();
	public virtual void Request()
	{
	    //转换成需要适配的类对象调用
		a.SpecificRequest();
	}
}
客户端代码:
static voi Main(String[] arg)
{
	Adapter adapter=new Adapter();
	adapter.Request();
}
      大家可能说这个模式和门面模式有点像,但是它们并一样。留给大家去思考?



以下是一个简单的实现这个功能的Android应用程序: 1. 在activity_main.xml文件中添加一个TextView和一个Button控件: ```xml <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main" 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="com.example.randomword.MainActivity"> <TextView android:id="@+id/tv_word" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="24sp" android:text="@string/default_word" /> <Button android:id="@+id/btn_next" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/btn_next" /> </RelativeLayout> ``` 2. 在MainActivity.java文件中添加以下代码: ```java public class MainActivity extends AppCompatActivity { private TextView tvWord; private Button btnNext; private String[] words = {"抱头鼠窜", "胸无点墨", "如鱼得水", "头破血流", "鼠目寸光", "狗急跳墙", "亡羊补牢"}; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); tvWord = (TextView) findViewById(R.id.tv_word); btnNext = (Button) findViewById(R.id.btn_next); btnNext.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { int index = (int) (Math.random() * words.length); tvWord.setText(words[index]); } }); } } ``` 这个应用程序中,我们使用了一个String类型的数组来存储所有的词汇,然后通过Math.random()方法来随机获取一个词汇,并将其显示在TextView控件上。每次点击Button按钮时都会更新TextView的文本内容。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值