设计模式实例(Lua)笔记之五(Bridge模式)
1.描写叙述
今天我要说说我自己,梦想中的我自己,我身价过亿,有两个大公司,一个是房地产公司,一个是服装制造业,这两个公司都非常赚钱,天天帮我在累加財富,事实上是什么公司我倒是不关心,我关心的是是不是在赚钱,赚 了多少,这才是我关心的,我是商人呀,唯利是图是我的本性,偷税漏税是我的方法,欺上瞒下、压榨员工血汗 我是的手段嘛,呵呵。同一时候我公司也 会发展,最终在有一天我认为赚钱速度太慢,于是我上下疏通,左右打关系,最终开辟了一条赚钱的康庄大道:生产山寨产品,什么产品呢?就是市场上什么牌子的东西火爆我生产什么牌子的东西,甭管是打火机还是电脑,仅仅要它火爆,我就生产,赚过了高峰期就换个产品,打一枪换一个牌子,不承担售后成本、也不操心销路问题,
我仅仅有正品的十分之中的一个的价格,你买不买?哈哈,赚钱呀!
那么,我的服装厂就開始变成山寨 iPod 生产车间,然后就看我的財富在积累积累,你想呀山寨的东西不须要特别的销售渠道(正品到哪里我就到哪里),不须要维修成本(大不了给你换个,你还想咋地,过了高峰期我就改头换面了你找谁维修去,投诉?投诉谁呢?),不承担广告成本(正品在打广告,我还须要吗?须要吗?),可是我也有犯愁的时候,我这是个山寨工厂,要及时的生产出市场上流行产品,转型要快,要灵活,今天从生产 iPod 转为生产 MP4,明天再转为生产上网本,这个都须要灵活的变化,不要限制的太死,那问题来了,每次我的厂房,我的工人,我的设备都在,不可能每次我换个山寨产品我的厂子就彻底不要了,这不行,成本忒高了点,那怎么办?请看类图:
CNewCorp 类和 IProduct 类建立一个关联关系,能够彻底解决我以后山寨公司生产产品的问题了。
凝视:
main(),客户
IProduct。产品接口
CHouse。房子
CIPod。ipod
CClothes,服装
CNewCorp,桥梁类,MakeMoney()是桥梁方法
CNewHouseCorp,仅仅能生产房子,所以构造函数是CHouse*
CShanZhaiCorp,什么赚钱就生产什么,所以构造函数是IProduct*
说明:客户直接使用CNewHouseCorp和CShanZhaiCorp类。在main()函数里构造产品。然后传到这两个类里。这两个类的MakeMoney()函数,先调用基类的MakeMoney()。然后分别执行各自的逻辑。
注意:CNewCorp起到了桥梁的作用。能够分别添加产品和公司。
2.代码
require "class" -----------IProduct------------
IProduct = class() function IProduct:BeProducted() end function IProduct:BeSelled() end
-- 注:事实上不须要继承IProduct
-----------House------------
House = class(IProduct) function House:BeProducted()
print("生产出的房子是这个样子的...")
end function House:BeSelled()
print("生产出的房子卖出去了...")
end -----------Clothes------------
Clothes = class(IProduct) function Clothes:BeProducted()
print("生产出的衣服是这个样子的...")
end function Clothes:BeSelled()
print("生产出的衣服卖出去了...")
end -----------IPod------------
IPod = class(IProduct) function IPod:BeProducted()
print("生产出的ipod是这个样子的...")
end function IPod:BeSelled()
print("生产出的ipod卖出去了...")
end -- 桥梁--
-------------NewCorp--------------
NewCorp = class() function NewCorp:ctor(pproduct)
self.m_pProduct = pproduct
end function NewCorp:IMakeMoney()
-- 每一个公司都是一样,先生产
self.m_pProduct:BeProducted() -- 然后销售
self.m_pProduct:BeSelled()
end -------------NewHouseCorp--------------
NewHouseCorp = class(NewCorp) function NewHouseCorp:MakeMoney()
self:IMakeMoney() print("房地产公司赚大钱了...")
end -------------ShanZhaiCorp--------------
ShanZhaiCorp = class(NewCorp) function ShanZhaiCorp:MakeMoney()
self:IMakeMoney()
print("房地产公司赚大钱了...")
end -------------DoNewRun Test--------------
function DoNewRun1()
print("----------房地产公司是这样执行的----------")
local house = House.new()
local newHouseCorp = NewHouseCorp.new(house)
newHouseCorp:MakeMoney() print("----------山寨公司是这样执行的----------")
local clothes = Clothes.new()
local shanZhaiCorp = ShanZhaiCorp.new(clothes)
shanZhaiCorp:MakeMoney()
end function DoNewRun2()
print("----------房地产公司是这样执行的----------")
local house = House.new()
local newHouseCorp = NewHouseCorp.new(house)
newHouseCorp:MakeMoney() print("----------山寨公司是这样执行的----------")
local ipod = IPod.new()
local shanZhaiCorp = ShanZhaiCorp.new(ipod)
shanZhaiCorp:MakeMoney() end --- main ---
function main()
DoNewRun1()
print("*********************************")
DoNewRun2()
end main()
执行结果,例如以下:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />
设计模式实例(Lua)笔记之五(Bridge模式)的更多相关文章
- 《图解设计模式》读书笔记4-1 Bridge模式
目录 概念 代码 角色 类图 想法 概念 Bridge模式即桥接模式.顾名思义,这个模式的作用是将类的功能层次结构和类的实现层次结构连接起来. 功能层次结构 Something -SomethingG ...
- 设计模式实例(Lua)笔记之四(Builder 模式)
1.描写叙述: 又是一个周三,快要下班了,老大突然又拉住我,喜滋滋的告诉我"牛叉公司非常惬意我们做的模型,又签订了一个合同,把奔驰.宝马的车辆模型都交给我我们公司制作了,只是这次又 ...
- 设计模式实例(Lua)笔记之七(Decorator模式)
1.描写叙述 就说说"我"上小学的的糗事吧. 我上小学的时候学习成绩非常的差,班级上 40 多个同学,我基本上都是在排名 45 名以后,依照老师给我的定义就是"不是读书的 ...
- 设计模式实例(Lua)笔记之六(Adapter模式)
1.描写叙述 "我"在 2004 年的时候带了一个项目,做一个人力资源管理,该项目是我们总公司发起的项目,公司一共同拥有 700 多号人,包含子公司,这个项目还是比較简单的,分为三 ...
- 设计模式C++描述----09.桥接(Bridge)模式
一. 举例 N年前: 计算机最先出来时,软件和硬件是一绑在一起的,比如IBM出了一台电脑,上面有一个定制的系统,假如叫 IBM_Win,这个IBM_Win系统当然不能在HP电脑上运行,同样HP出的HP ...
- 设计模式C++学习笔记之五(Factory Method工厂方法模式)
工厂方法模式的意义是定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类当中.核心工厂类不再负责产品的创建,这样核心类成为一个抽象工厂角色,仅负责具体工厂子类必须实现的接口,这样进一步抽象化的 ...
- 《图解设计模式》读书笔记9-2 Proxy模式
目录 Proxy模式 示例程序 程序描述 类图 程序 角色和类图 角色 模式类图 思路拓展 提升速度 代理与委托 Http代理 与其他模式的关联 Decorator模式 Proxy模式 Proxy是代 ...
- 《Head First 设计模式》学习笔记——适配器模式 + 外观模式
在ADO.NET中.对于我们从数据库中取出的数据都要放到一个DataSet中,无论你是Access的数据库,还是SQL的数据库,或者是Oracle的数据库都要放到DataSet中..NET中并没有提供 ...
- 《图解设计模式》读书笔记9-1 Flyweight模式
目录 模式简介 示例代码 代码功能与实现思路 类图 代码 结果图示分析 模式角色和类图 角色 类图 拓展思路 对多个地方产生影响 什么要共享,什么不要共享 垃圾回收 模式简介 Flyweight是轻量 ...
随机推荐
- vuejs {{}},v-text 和 v-html的区别
<div id="app"> <p>{{message}}</p> <!-- 输出:<span>通过双括号绑定</spa ...
- ACM_黯然销魂?
黯然销魂? Time Limit: 2000/1000ms (Java/Others) Problem Description: 发神集训表现出色,决定要送他鸡翅,但是锴神决定不让他那么容易拿到,所以 ...
- [转]android使用全局变量的两种方法
本文转自:http://blog.csdn.net/feiyangxiaomi/article/details/9966215 在我们使用android编写程序的时候,少不了想利用全局变量,但是面向对 ...
- DAO模式详解
DAO模式 数据访问层(DAO): 数据的增.删.改.查操作: 业务逻辑层(service): 业务来往的操作,需要调用数据访问层则调用数据访问层,传递数据: 表现层(UI): 呈现数据,用户交互. ...
- Java常用类库(二):Iterator迭代器和子范围视图
今天介绍集合类的以下内容: l Iterator迭代器 l 子范围视图简介 Iterator迭代器: 应该将java迭代器认为是位于两个元素之间, 当调用next 时,迭代器就越过下一个元素,并返 ...
- 将电脑浏览器User-Agent识别改成手机浏览器UA几种简单方法
第一种方法:修改浏览器的快捷方式 右击桌面上的Chrome浏览器图标,在弹出的右键菜单中选择“复制”,复制一个图标副本到桌面.右击该副本,选择“属性”,打开相应的对话框,在“目标”文本框的字符后面添加 ...
- GatewayWorker + LayIM实现即时聊天
一.程序目录结构 二.代码展示 附LayIM开发文档:https://www.layui.com/doc/modules/layim.html 1.前端代码 <!DOCTYPE html> ...
- Fedora 和 RedHat 以及 SUSE 中 YUM 工具的使用
参考博客:https://www.cnblogs.com/good-study/p/9928587.html 一.yum命令概述: 1.简介: yum命令时在Fedora和RedHat以及SUSE中基 ...
- SweetAlert弹出框
以前也用过,那个时候没有写过,突然看见了,就写上了. 网址:http://mishengqiang.com/sweetalert2/ swal({ title: '确定删除吗?', text: '你将 ...
- [SQL Service] 时间处理:获取今天的00:00:00/获取今天的23:59:59
获取今天的00:00:00 SELECT CONVERT(DATETIME,CONVERT(VARCHAR(10),GETDATE(),120)) 获取今天的23:59:59 1.SELECT DAT ...