设计模式实例(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是轻量 ...
随机推荐
- jQuery五屏轮播手风琴切换代码
jQuery五屏轮播手风琴切换代码 在线演示本地下载
- PHP配置步骤
背景: 作为web前端人员,必不可少的会接触到一些服务器端的脚本语言,比如PHP.因为最近在进行相关知识的总结,同时也回顾一下PHP基础知识.这次总结先从PHP的开始说起,即PHP的配置步骤. 什么是 ...
- VC++文件监控 ReadDirectoryChangesW
#include <windows.h> #include <tchar.h> #include <stdio.h> #include <assert.h&g ...
- 10、scala面向对象编程之Trait
1. 将trait作为接口使用 2.trait中定义具体方法 3.trait定义具体字段 4.trait中定义抽象字段 5.为实例对象混入trait 6.trait调用链 7.在trait中覆盖抽象 ...
- Twisted web开发教程
最近在网上看到一篇twisted web开发文章,将它实践了一下,twisted 提供基本的url路由 和 控制器,模板与模型需要外部扩展 1.目录浏览 2.get请求 3.url路由 4.接受带参数 ...
- 如何在Android Studio中查看一个类的继承关系呢?
在面板顶部的工具栏中,找到Navigate,然后在下拉列表中,找到“Type Hierarchy”(快捷键 Ctrl+H),点击.即可在面板右侧出现该类的Hierarchy层级图.
- C# Tuple 创建一个新二元集合
List<string> list1=new List<string>(); List<string> list2=new List<string>() ...
- 扩增子图表解读4曼哈顿图:差异分类级别Taxonomy
曼哈顿图 Manhattan Plot 曼哈顿图本质上是一个散点图,用于显示大量非零大范围波动数值,最早应用于全基因组关联分析(GWAS)研究展示高度相关位点.它得名源于样式与曼哈顿天际线相似(如下图 ...
- ImageMagick的下载和配置
2. 新建一个VC++的工程,项目->属性 VC++目录中 包含目录中加入4项,ImageMagick安装路径下的include文件夹,和include里边的三个文件夹. 库目录中加入1项,Im ...
- (C/C++学习)12.获取系统时间制作时钟(system()略解)
说明:通过调用函数来获取系统当前时间,并制作一个数字式的时钟,时钟的显示包括年.月.日.小时.分以及秒,通过系统屏幕的刷新来对不断更新的时间进行屏幕的显示. 一.对相关函数的学习 1.time_t t ...