惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Recent Announcements
Recent Announcements
博客园 - Franky
博客园 - 三生石上(FineUI控件)
H
Hackread – Cybersecurity News, Data Breaches, AI and More
Apple Machine Learning Research
Apple Machine Learning Research
云风的 BLOG
云风的 BLOG
人人都是产品经理
人人都是产品经理
博客园 - 【当耐特】
L
LangChain Blog
Stack Overflow Blog
Stack Overflow Blog
H
Help Net Security
爱范儿
爱范儿
罗磊的独立博客
博客园_首页
美团技术团队
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
月光博客
月光博客
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
量子位
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
博客园 - 叶小钗
V
Visual Studio Blog
T
Tailwind CSS Blog

博客园 - 泽来

java多线程---线程之间的通信 设计原则 java复习进程 java小点滴 转>java5.0新特性 面试题收集 我买的书 java编程思想中关于多态性的描述 javascipt正则表达式 - 泽来 - 博客园 javascript小代码 - 泽来 - 博客园 DataGrid数据在Execel中打开 - 泽来 - 博客园 javascript高级教程 智力题收集 asp.net的TextBox回车触发事件 - 泽来 - 博客园 Builder生成器模式 单件模式(singleton) 是男人就坚持100下(强力益智,请留下战绩) XMLHTTP简介 - 泽来 - 博客园 多级无刷新联动(GB2312编码转换为UTF-8未取得满意效果) - 泽来 - 博客园
适配器模式
泽来 · 2006-02-25 · via 博客园 - 泽来

将一个类的接口转换成客户希望的另一个接口。
Adapter模式使原来由于接口不兼容而不能一起工作的那些类能够一起工作。
                                                         GOF设计模式

Adapter模式主要应用于“希望复用一些现存的类,但是接口又与复
用环境要求不一致的情况“,在遗留代码复用,类库迁移等方面非常有用。

using System.Collections;
using System;

interface IStack   //客户期望的接口
{
    
void Push(Object item);
    Object Pop();
    Object Peek();
}

//对象适配器
class Adapter : IStack  //适配对象
{
    ArrayList adpatee;
//被适配的对象1
    
//可以适配多个
    ArrayList adpatee2;//被适配的对象2
    
    
public Adapter()
    
{
        adpatee 
= new ArrayList();
    }

    
public void Push(Object item)
    
{
        adpatee.Add(item);
    }

    Object Pop()
    
{
        adpatee.RemoveAt(adpatee.Count 
- 1);
    }

    Object Peek()
    
{
        
return adpatee(adpatee.Count - 1);
    }

}

//类适配器(违反了类应该具有单一职责的原则)
class Adapter : ArrayList,IStack
{
    
public void Push(Object item)
    
{
        
this.Add(item);
    }

    Object Pop()
    
{
        
return this.RemoveAt(list.Count - 1);
    }

    Object Peek()
    
{
        
return this(this.Count - 1);
    }

}

集合类中对现有对象的非序
   现有对象未实现IComparable接口
   实现一个排序适配器(继随IComparer接口),然后在
   其Compare方法中对两个对象进行比较
class Employee
{
    
int age;
    
string name;
    
    
public int Age
    
{
        
get{return this.age;}
        
set{this.age = value;}
    }

}


class EmployeeSortAdapter : IComparer
{
    
public int Compare(Object obj1, Object obj2)
    
//不一定按适配器模式来,把适配对象作为参数传递同样,例如此处的Object
    {
        
if(obj1.GetType() != typeOf(Employee) || obj2.GetType() != typeOf(Employee))
        
{
            
//throw a Exception
        }

        
        Employee e1 
= (Employee)obj1;
        Employee e2 
= (Employee)obj2;
        
if(e1.Age == e2.Age)
        
{
            
return 0 ;
        }

        
if(e1.Age > e2.Age)
        
{
            
return 1;
        }

        
if(e1.Age < e2.Age)
        
{
            
return -1;
        }

    }

}

class App
{
    
public static void Mian()
    
{
        Employeep[] employee 
= new Employee[100];
        
//.赋值
        //排序
        Array.Sort(employee, 
new EmployeeSortAdapter());
    }

}