《大话设计模式》ruby版代码:外观模式
需求:
股民买卖股票
初步代码:
# -*- encoding: utf-8 -*- #股票1
class Stock1
def buy
puts '股票1买入'
end def sell
puts '股票1卖出'
end
end #股票2
class Stock2
def buy
puts '股票2买入'
end def sell
puts '股票2卖出'
end
end #股票3
class Stock3
def buy
puts '股票3买入'
end def sell
puts '股票3卖出'
end
end #国债1
class NationalDebt1
def buy
puts '国债1买入'
end def sell
puts '国债1卖出'
end
end #房地产1
class Realty1
def buy
puts '房地产1买入'
end def sell
puts '房地产1卖出'
end
end
s1 = Stock1.new
s2 = Stock2.new
s3 = Stock3.new
n1 = NationalDebt1.new
r1 = Realty1.new s1.buy
s2.buy
s3.buy
n1.buy
r1.buy s1.sell
s2.sell
s3.sell
n1.sell
r1.sell
问题:
可以发现用户需要了解股票、国债、房产情况,需要参与这些项目的具体买和卖,耦合性很高。
改进代码
# -*- encoding: utf-8 -*- #股票1
class Stock1
def buy
puts '股票1买入'
end def sell
puts '股票1卖出'
end
end #股票2
class Stock2
def buy
puts '股票2买入'
end def sell
puts '股票2卖出'
end
end #股票3
class Stock3
def buy
puts '股票3买入'
end def sell
puts '股票3卖出'
end
end #国债1
class NationalDebt1
def buy
puts '国债1买入'
end def sell
puts '国债1卖出'
end
end #房地产1
class Realty1
def buy
puts '房地产1买入'
end def sell
puts '房地产1卖出'
end
end #基金类
class Fund
attr_accessor s1, s2, s3, n1, r1 def initialize
s1 = Stock1.new
s2 = Stock2.new
s3 = Stock3.new
n1 = NationalDebt1.new
r1 = Realty1.new
end def buy
s1.buy
s2.buy
s3.buy
n1.buy
r1.buy
end def sell
s1.sell
s2.sell
s3.sell
n1.sell
r1.sell
end
end f1 = Fund.new
f1.buy
f1.sell
好处:用户不需要了解各种股票,只需购买卖出基金即可。
外观模式:
为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。
《大话设计模式》ruby版代码:外观模式的更多相关文章
- 大话设计模式C++版——抽象工厂模式
前面说过,简单工厂模式是最基础的一种设计模式,那以工厂命名的设计模式就是23种设计模式中最多的一种,他们一脉相承,一步一步进化而来,这里就是其中的最后一种——抽象工厂模式(Abstract Facto ...
- 大话设计模式C++版——工厂方法模式
工厂方法模式是以简单工厂模式为基础的,如果未了解简单工厂模式的同学可先浏览<大话设计模式C++版——简单工厂模式>.在简单工厂模式中,提到过简单工厂模式的缺陷,即违背了开发—封闭原则,其主 ...
- 大话设计模式C++版——简单工厂模式
简单工厂模式应该是所有设计模式中最简单,也最基础的一种模式,以下是一个简单的采用工厂模式写一个加减法的计算器. 1.抽象接口类——依赖倒转原则(高层和底层都要依赖于抽象,针对接口编程) class I ...
- 《大话设计模式》c++实现 外观模式
外观模式:为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用. 外观模式在什么时候使用呢? 分为三个阶段: (1)首先,在设计初期阶段,应该要有意识的 ...
- 大话设计模式C++版——工厂模式在COM中的典型应用
上篇<大话设计模式C++版——抽象工厂模式>中,我们拯救世界未遂,留下小小的遗憾,本篇中我们将给出一个解决方案——COM组件技术,同时也顺便扯扯工厂模式在COM组件技术中的应用. 工厂模式 ...
- 大话设计模式C++版——代理模式
本篇开始前先发个福利,程杰的<大话设计模式>一书高清电子版(带目录)已上传至CSDN,免积分下载. 下载地址:http://download.csdn.net/detail/gufeng9 ...
- 大话设计模式C++版——表驱动法改造简单工厂
上回<大话设计模式C++版——简单工厂模式>中指出了简单工厂模式的缺陷,即违背了开发—封闭原则,其主要原因是由于switch的判断结构的使用,使修改或添加新的对象时需要改动简单工厂类的代码 ...
- Head First 设计模式之适配器模式与外观模式
Head First设计模式之适配器模式与外观模式 前言: 之前讲过装饰者模式,将对象包装起来并赋予新的职责,这一章我们也会将对象进行包装,只不过是让它们看起来不像自己而像是别的东西.这样就可以在设计 ...
- 设计模式(九)外观模式Facade(结构型)
设计模式(九)外观模式Facade(结构型) 1. 概述 外观模式,我们通过外观的包装,使应用程序只能看到外观对象,而不会看到具体的细节对象,这样无疑会降低应用程序的复杂度,并且提高了程序的可维护性. ...
- Java设计模式(11)外观模式(Facade模式)
外观模式(Facade)的定义:为子系统中的一组接口提供一个一致的界面. Facade一个典型应用就是数据库JDBC的应用,如下例对数据库的操作: public class DBCompare { C ...
随机推荐
- 高级类特性----接口(intertface)
接 口 有时必须从几个类中派生出一个子类,继承它们所有的属性和方法.但是,Java不支持多重继承.有了接口,就可以得到多重继承的效果. 接口(interface)是抽象方法和常量值的定义的集合. 从本 ...
- 实现Runnable接口和继承Thread类区别
如果一个类继承Thread,则不适合资源共享.但是如果实现了Runable接口的话,则很容易的实现资源共享. 实现Runnable接口比继承Thread类所具有的优势: 1):适合多个相同的程序代码的 ...
- Linux 虚拟终端:screen
screen 是一个虚拟终端,我们可以把执行时间很长的命令放在虚拟终端中执行,即使终端断开,这个虚拟终端也会在后台执行 [root@localhost ~]$ yum install -y scree ...
- Java之类型的转换
1.String 类型转化为 int 类型,需要使用 Integer 类中的 parseInt() 方法或者 valueOf() 方法进行转换. int a = Integer.parseInt(st ...
- sql语句如何删除最后一条和第一条信息
这是先前建好的SQL数据库中的test表, sql语句: delete a from test a,(select max(id) id from test) b where a.id = b.id ...
- hadoop错误各种原因
NoRouteToHostException 错误描述: INFO hdfs.DFSClient: Exception in createBlockOutputStream java.net.NoRo ...
- 【转载】为ASP.NET MVC及WebApi添加路由优先级
路由方面的: 转载地址:http://www.jb51.net/article/73417.htm Author:lijiao 这是一个对Asp.Net Mvc的一个很小的功能拓展,小项目可能不太需要 ...
- tp5 集成 layui富文本编辑器
编辑器地址:http://www.layui.com/doc/modules/layedit.html 一睹芳容 1 去官网:http://www.layui.com/ 下载layui ├─c ...
- LeetCode——Single Number
Description: Given an array of integers, every element appears twice except for one. Find that singl ...
- swiper的延迟加载(非官网方法)
网上找的: https://github.com/nolimits4web/Swiper/issues/626 var tabsSwiper = new Swiper('#games-content' ...