加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

swift - The Adapter Pattern

发布时间:2020-12-14 01:55:59 所属栏目:百科 来源:网络整理
导读:This pattern allows two objects that provide related functionality to work together even when they have incompatible APIs. Diagram: client: let search = SearchTool(dataSources: SalesDataSource(),DevelopmentDataSource()); println ( "--List-

This pattern allows two objects that provide related functionality to work together even when they have incompatible APIs.



Diagram:


client:


let search = SearchTool(dataSources: SalesDataSource(),DevelopmentDataSource());

println("--List--");

for ein search.employees {

println("Name:(e.name)");

}

println("--Search--");

for ein search.search("VP",type: SearchTool.SearchType.TITLE) {

println("Name:(e.name),Title:(e.title)");

}



///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

pattern:

class SearchTool {

enum SearchType {

case NAME; case TITLE;

}

privatelet sources:[EmployeeDataSource];

init(dataSources: EmployeeDataSource...) {

self.sources = dataSources;

}

var employees:[Employee] {

var results = [Employee]();

for source insources {

results += source.employees;

}

return results;

}

func search(text:String,type:SearchType) -> [Employee] {

var results = [Employee]();

for source insources {

results += type== SearchType.NAME ? source.searchByName(text)

: source.searchByTitle(text);

}

return results;

}

}

///

class DataSourceBase :EmployeeDataSource {

var employees = [Employee]();

func searchByName(name: String) -> [Employee] {

return search({e -> Bool in

return e.name.rangeOfString(name) != nil;

});

}

func searchByTitle(title: String) -> [Employee] {

return search({e -> Bool in

return e.title.rangeOfString(title) != nil;

})

}

privatefunc search(selector:(Employee ->Bool)) -> [Employee] {

var results = [Employee]();

for e in employees {

if (selector(e)) {

results.append(e);

}

}

return results;

}

}

class SalesDataSource :DataSourceBase {

override init() {

super.init();

employees.append(Employee(name:"Alice",title: "VP of Sales"));

employees.append(Employee(name:"Bob",title: "Account Exec"));

}

}

class DevelopmentDataSource :DataSourceBase {

override init() {

super.init();

employees.append(Employee(name:"Joe",title: "VP of Development"));

employees.append(Employee(name:"Pepe",title: "Developer"));

}

}

/////////

struct Employee {

var name:String;

var title:String;

}

protocol EmployeeDataSource {

var employees:[Employee] {get };

func searchByName(name:String) -> [Employee];

func searchByTitle(title:String) -> [Employee];

}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读