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

推荐订阅源

Engineering at Meta
Engineering at Meta
博客园_首页
H
Help Net Security
WordPress大学
WordPress大学
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
罗磊的独立博客
博客园 - 三生石上(FineUI控件)
B
Blog
I
InfoQ
SecWiki News
SecWiki News
T
Tailwind CSS Blog
Spread Privacy
Spread Privacy
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
V
Vulnerabilities – Threatpost
N
Netflix TechBlog - Medium
P
Palo Alto Networks Blog
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
Vercel News
Vercel News
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
K
Kaspersky official blog
M
MIT News - Artificial intelligence
S
Schneier on Security
T
Threat Research - Cisco Blogs
F
Fortinet All Blogs
Cyberwarzone
Cyberwarzone
Scott Helme
Scott Helme
aimingoo的专栏
aimingoo的专栏
Martin Fowler
Martin Fowler
MyScale Blog
MyScale Blog
The Cloudflare Blog
Recent Announcements
Recent Announcements
Security Latest
Security Latest
G
GRAHAM CLULEY
IT之家
IT之家
Y
Y Combinator Blog
The Last Watchdog
The Last Watchdog
腾讯CDC
Google DeepMind News
Google DeepMind News
V
V2EX
S
Securelist
TaoSecurity Blog
TaoSecurity Blog
B
Blog RSS Feed
S
SegmentFault 最新的问题
博客园 - 叶小钗
P
Proofpoint News Feed
云风的 BLOG
云风的 BLOG
Project Zero
Project Zero
G
Google Developers Blog
Google DeepMind News
Google DeepMind News
F
Full Disclosure

博客园 - 泽来

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());
    }

}