设计模式实例(Lua)笔记之六(Adapter模式)
1.描写叙述
“我”在 2004 年的时候带了一个项目,做一个人力资源管理,该项目是我们总公司发起的项目,公司一共同拥有 700 多号人,包含子公司,这个项目还是比較简单的,分为三大模块:人员信息管理,薪酬管理,职位管理,当中人员管理这块就用到了适配器模式,是怎么回事呢?当时开发时明白的指明:人员信息简管理的对象是全部员工的全部信息,然后我们就这样设计了一个类图:
这个项目是 04 年年底投产的,执行到 05 年年底还是比較平稳的,中间修修补补也非常正常,05 年年底不知道是那股风吹的,非常多公司開始使用借聘人员的方式招聘人员,我们公司也不例外,从一个人力资源公司借用了一大批的低技术、低工资的人员,分配到各个子公司,总共同拥有将近 200 号人,然后就找我们部门老大谈判,说要添加一个功能借用人员管理,老大一看有钱赚呀,一拍大腿,做!
我带人过去一调研,不是这么简单,人力资源公司有一套自己的人员管理系统,我们公司须要把我们使用到的人员信息传输到我们的系统中,系统之间的传输使用 RMI(Remote Method Invocation,远程对象调用)的方式,可是有一个问题人力资源公司的人员对象和我们系统的对象不同样呀,他们的对象是这种:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcmV4dWVmZW5neWU=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="" />
人员资源公司是把人的信息分为了三部分:基本信息,办公信息和个人家庭信息,而且都放到了 HashMap中,比方人员的姓名放到 BaseInfo 信息中,家庭地址放到 HomeInfo 中,这咱不好说他们系统设计的不好,那问题是咱的系统要和他们系统有交互,怎么办?使用适配器模式,类图例如以下:
2.代码:
require "class" --------IUserInfo-------
IUserInfo = class() function IUserInfo:GetUserName() end function IUserInfo:GetHomeAddress() end function IUserInfo:GetMobileNumber() end function IUserInfo:GetOfficeTelNumber() end function IUserInfo:GetJobPosition() end function IUserInfo:GetHomeTelNumber() end --------UserInfo-------
UserInfo = class(IUserInfo) function UserInfo:GetUserName()
print("姓名叫做...")
end function UserInfo:GetHomeAddress()
print("这里是员工的家庭地址...")
return "0"
end function UserInfo:GetMobileNumber()
print("这个人的手机号码是0000...")
return "0"
end function UserInfo:GetOfficeTelNumber()
print("办公室电话是...")
return "0"
end function UserInfo:GetJobPosition()
print("这个人的职位是BOSS...")
return "0"
end function UserInfo:GetHomeTelNumber()
print("员工的家庭电话是...")
return "0"
end --------OuterUserBaseInfo-------
OuterUserBaseInfo = class() function OuterUserBaseInfo:GetUserName()
print("姓名叫做...")
return "0"
end function OuterUserBaseInfo:GetMobileNumber()
print("这个人的手机号码是0001...")
return "0"
end --------OuterUserOfficeInfo-------
OuterUserOfficeInfo = class() function OuterUserOfficeInfo:GetOfficeTelNumber()
print("办公室电话是...")
return "0"
end function OuterUserOfficeInfo:GetJobPosition()
print("这个人的职位是BOSS...")
return "0"
end --------OuterUserHomeInfo-------
OuterUserHomeInfo = class() function OuterUserHomeInfo:GetHomeAddress()
print("这里是员工的家庭地址...")
return "0"
end function OuterUserHomeInfo:GetHomeTelNumber()
print("员工的家庭电话是...")
return "0"
end --------IOuterUser-------
IOuterUser = class() function IOuterUser:GetUserBaseInfo() end function IOuterUser:GetUserOfficeInfo() end function IOuterUser:GetUserHomeInfo() end --------OuterUser-------
OuterUser = class(IOuterUser) function OuterUser:GetUserBaseInfo()
return OuterUserBaseInfo.new()
end function OuterUser:GetUserOfficeInfo()
return OuterUserOfficeInfo.new()
end function OuterUser:GetUserHomeInfo()
return OuterUserHomeInfo.new()
end --------OuterUserInfo-------
OuterUserInfo = class(IUserInfo) function OuterUserInfo:ctor()
self.m_pOuterUser = OuterUser.new()
end function OuterUserInfo:clear()
self.m_pOuterUser = nil
end -- 获取姓名
function OuterUserInfo:GetUserName()
local pBaseInfo = self.m_pOuterUser:GetUserBaseInfo()
pBaseInfo:GetUserName()
pBaseInfo = nil return "0"
end -- 获取姓名
function OuterUserInfo:GetMobileNumber()
local pBaseInfo = self.m_pOuterUser:GetUserBaseInfo()
pBaseInfo:GetMobileNumber()
pBaseInfo = nil return "0"
end -- 获取家庭地址
function OuterUserInfo:GetHomeAddress()
local pHomeInfo = self.m_pOuterUser:GetUserHomeInfo()
pHomeInfo:GetHomeAddress()
pHomeInfo = nil return "0"
end -- 获取家庭电话
function OuterUserInfo:GetHomeTelNumber()
local pHomeInfo = self.m_pOuterUser:GetUserHomeInfo()
pHomeInfo:GetHomeTelNumber()
pHomeInfo = nil return "0"
end -- 获取办公室号码
function OuterUserInfo:GetOfficeTelNumber()
local pOfficeInfo = self.m_pOuterUser:GetUserOfficeInfo()
pOfficeInfo:GetOfficeTelNumber()
pOfficeInfo = nil return "0"
end -- 获取职位
function OuterUserInfo:GetJobPosition()
local pOfficeInfo = self.m_pOuterUser:GetUserOfficeInfo()
pOfficeInfo:GetJobPosition()
pOfficeInfo = nil return "0"
end --- main ---
function main()
-- 本系统调用
local pYourGirl = UserInfo.new()
pYourGirl:GetMobileNumber() -- 外部系统调用
pYourGirl = OuterUserInfo.new()
pYourGirl:GetMobileNumber()
end main()
执行结果,例如以下:
设计模式实例(Lua)笔记之六(Adapter模式)的更多相关文章
- 《图解设计模式》读书笔记1-2 Adapter模式
目录 Adapter即适配器,可以类比为将220V的电压的电源转为5V电压的手机充电器,起转换的作用. 明确概念: Adaptee:被适配者,即220v电压的电源 Adapter:适配器,即手机充电器 ...
- 设计模式实例(Lua)笔记之四(Builder 模式)
1.描写叙述: 又是一个周三,快要下班了,老大突然又拉住我,喜滋滋的告诉我"牛叉公司非常惬意我们做的模型,又签订了一个合同,把奔驰.宝马的车辆模型都交给我我们公司制作了,只是这次又 ...
- 设计模式实例(Lua)笔记之五(Bridge模式)
1.描写叙述 今天我要说说我自己,梦想中的我自己,我身价过亿,有两个大公司,一个是房地产公司,一个是服装制造业,这两个公司都非常赚钱,天天帮我在累加財富,事实上是什么公司我倒是不关心,我关心的是是不是 ...
- 设计模式实例(Lua)笔记之七(Decorator模式)
1.描写叙述 就说说"我"上小学的的糗事吧. 我上小学的时候学习成绩非常的差,班级上 40 多个同学,我基本上都是在排名 45 名以后,依照老师给我的定义就是"不是读书的 ...
- 设计模式学习笔记-Adapter模式
Adapter模式,就是适配器模式,使两个原本没有关联的类结合一起使用. 平时我们会经常碰到这样的情况,有了两个现成的类,它们之间没有什么联系,但是我们现在既想用其中一个类的方法,同时也想用另外一个类 ...
- Net设计模式实例之适配器模式(Adapter Pattern)
一.适配器模式简介(Brief Introduction) 适配器模式,将一个类装换成客户期望的另外一个接口.Adapter模式使的原本由于接口不兼容而不能工作的那些类可以一起工作. 二.解决的问题( ...
- 设计模式之(二)Adapter模式
今天学习Adapter模式,An adapter helps two incompatible interfaces to work together. This is the real world ...
- 设计模式C++描述----06.适配器(Adapter)模式
一. 定义 适配器模式将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类可以一起工作. Adapter 模式的两种类别:类模式和对象模式. 二. 举例说明 实际中 ...
- 设计模式C++学习笔记之六(Facade门面模式)
Facade门面模式,也是比较常用的一种模式,基本上所有软件系统中都会用到. GOF 在<设计模式>一书中给出如下定义:为子系统中的一组接口提供一个一致的界面, Facade 模式定义 ...
随机推荐
- 验证备份集-使用DBVERIFY工具
DBVERIFY确认备份集是否存在坏块 验证TEST03.DBF 文件的是否存在坏块 C:\Documents and Settings\Administrator>dbv file=D:\or ...
- ViewPager设置不能滚动
设置ViewPager不能滑动 1:设置当前选中的页面 public void setCurrentItem(int item) { mPopulatePending = false; setCurr ...
- nginx的Rewrite重写
location /{ if ($remote_addr=192.168.1.100){ //禁止此 ip 访问 ...
- NodeJS学习笔记 (14)URL查询字符串-querystring(ok)
模块概述 在nodejs中,提供了querystring这个模块,用来做url查询参数的解析,使用非常简单. 模块总共有四个方法,绝大部分时,我们只会用到 .parse(). **.stringify ...
- bzoj2763 [JLOI]飞行路线 分层图最短路
问题描述 Alice和Bob现在要乘飞机旅行,他们选择了一家相对便宜的航空公司.该航空公司一共在n个城市设有业务,设这些城市分别标记为0到n-1,一共有m种航线,每种航线连接两个城市,并且航线有一定的 ...
- Linux GPT分区表16进制实例分析
Linux GPT分区表16进制实例分析 GPT分区表随着win10的普及,已经在越来越多的新电脑上开始使用了.前段时间的新闻有看到说Intel会在后面的新平台中完全取消CSM支持,这也大概相当于后面 ...
- python中的future,你见过可以使用未来版本模块的语言吗?
import xxx from yy.xxx import xx from yy.xxx import xx as x python最常见的导包导模块语句 yy为包名,包就是文件夹,模块就是xxx.p ...
- /*+parallel(t,4)*/在SQL调优中的重要作用!
谈谈HINT /*+parallel(t,4)*/在SQL调优中的重要作用! /*+parallel(t,4)*/在大表查询等操作中能够起到良好的效果,基于并行查询要启动并行进程.分配任务与系统资源. ...
- 编程算法 - 篱笆修理(Fence Repair) 代码(C)
篱笆修理(Fence Repair) 代码(C) 本文地址: http://blog.csdn.net/caroline_wendy 题目: 把一块木板切成N块, 每次切两块, 分割的开销是木板长度, ...
- An internal error occurred during: "Checking tomcat state". Error while reading server.xml
An internal error occurred during: "Checking tomcat state". Error while reading server.xml ...