设计模式实例(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是轻量 ...
随机推荐
- DFS知识点
2019-06-01 11:14:34 加油,坚持!!! 1. 2. 3.
- 对于民科吧s5_or吧友自增树的复杂度计算
原帖 自增树如s5_or所说,是一种思想像Splay的数据结构,每个节点维护一个堆权值,每当询问一个节点时,堆权值++,并返回时维护堆权值为堆的性质.这个树从旋转次数上比Splay小是肯定的,因为Sp ...
- JSP所需要掌握的部分
JSP基本语法 指令 <%@ 指令%> JSP指令是JSP的引擎 主要的两种指令是page和include(taglib) <%@ page import="java.ut ...
- 未能加载文件或程序集Microsoft.SharePoint.Sandbox.dll
项目引用了MiscroSoft.SharePoint.dll程序集,编译后页面报错: 未能加载文件或程序集“Microsoft.Sharepoint.Sandbox, Version=14.0.0.0 ...
- 兼容浏览器 div固定浏览器窗口底部 浮动div
css内容: <style type="text/css"> #ken_BB { padding-right:30px; text-align: center; col ...
- node or gulp 使用
##MAC 升级node.js的方法 ###第一步,先查看本机node.js版本: $ node -v ###第二步,清除node.js的cache: $ sudo npm cache clean - ...
- Android基础TOP2:单机按钮改变字体颜色
---恢复内容开始--- Activity: <TextView android:id="@+id/t1" android:textSize="30dp" ...
- Redis主从复制失败(master_link_status:down)
今天配置redis主从复制时出现master_link_status:down提示. 首先打开slave的redis.conf配置文件,确定slaveof 和masterauth 两个选项配置是否正确 ...
- mysql高可用架构mha之master_ip_failover脚本
脚本如下: #!/usr/bin/env perl use strict; use warnings FATAL => 'all'; use Getopt::Long; my ...
- python 获取本机环境信息
一.函数 1.socket.gethostname():不带任何参数,返回一个字符串(主机名),通常不完整.比如csm.example.com 只会返回csm 2.socket.getfqdn():带 ...