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

推荐订阅源

TaoSecurity Blog
TaoSecurity Blog
Jina AI
Jina AI
雷峰网
雷峰网
月光博客
月光博客
The GitHub Blog
The GitHub Blog
WordPress大学
WordPress大学
B
Blog RSS Feed
美团技术团队
C
CXSECURITY Database RSS Feed - CXSecurity.com
小众软件
小众软件
Security Latest
Security Latest
Microsoft Azure Blog
Microsoft Azure Blog
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
C
Cybersecurity and Infrastructure Security Agency CISA
Last Week in AI
Last Week in AI
A
Arctic Wolf
Latest news
Latest news
Attack and Defense Labs
Attack and Defense Labs
I
Intezer
F
Fortinet All Blogs
罗磊的独立博客
MongoDB | Blog
MongoDB | Blog
Webroot Blog
Webroot Blog
S
Secure Thoughts
Help Net Security
Help Net Security
Apple Machine Learning Research
Apple Machine Learning Research
博客园_首页
V
Visual Studio Blog
P
Proofpoint News Feed
博客园 - 【当耐特】
P
Privacy International News Feed
V
Vulnerabilities – Threatpost
Stack Overflow Blog
Stack Overflow Blog
Know Your Adversary
Know Your Adversary
云风的 BLOG
云风的 BLOG
Hacker News: Ask HN
Hacker News: Ask HN
L
LINUX DO - 最新话题
H
Help Net Security
爱范儿
爱范儿
酷 壳 – CoolShell
酷 壳 – CoolShell
S
SegmentFault 最新的问题
Forbes - Security
Forbes - Security
T
Tailwind CSS Blog
量子位
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
T
Tenable Blog
Cloudbric
Cloudbric
N
News and Events Feed by Topic
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
Hugging Face - Blog
Hugging Face - 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());
    }

}