设计模式实例(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 模式定义 ...
随机推荐
- js中如何取精度
js中如何取精度 一.总结 一句话总结:其实round()函数去经度会有误差,直接用num.toFixed(2)简单方便. toFixed()方法会按照指定的小数返回数值的字符串表示.var num ...
- pyspark import 可以通过 --py-files
公用函数的放到了 common.py 文件中. 通过 --py-files 可以在pyspark中可以顺利导入: pyspark --py-files lib/common.py > impor ...
- matplotlib 可视化 —— 定制 matplotlib
1. matplotlibrc 文件 matplotlib使用matplotlibrc [matplotlib resource configurations] 配置文件来自定义各种属性,我们称之为 ...
- Python TurtleWorld configuration and simple test
TurtleWorld provides a set of functions for drawing lines by steering turtles around the screen. You ...
- POJ 3665 模拟
按照题意模拟就OK了 //By SiriusRen #include <cstdio> #include <cstring> #include <algorithm> ...
- Struts2的struts.xml的标准配置文档
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-/ ...
- LINQ返回DataTable类型 list转dataset 转换为JSON对象
using System.Web.Script.Serialization; using System.Collections.Generic; using System.Reflection; us ...
- 推荐《SQL基础教程(第2版)》中文PDF+源代码+习题答案
我认为<SQL基础教程(第2版)>非常适合数据库学习的初学者.论述的角度是读者的角度,会换位思考到读者在看到这一段时候会发出怎样的疑问,非常难得:原始数据的例题只有一道,但是可以反复从不同 ...
- APUE 学习笔记 —— 文件I/O
本章节主要讲了 Linux 系统下的关于文件I/O操作的几个函数:open.read.write.lseek.close 的使用和需要注意的一些细节.接着,又介绍了多进程见如何共享文件.下面开始知识点 ...
- selenium的安装(2)
selenium的安装: 1):selenium的在线按:使用dom的cmd打开命令提示符窗口.然后敲上这个命令可以安装了==> 安装命令 pip install selenium 删除命令: ...