求助,造了破碎群岛肥沃土壤的土壤,建造模式里却没有

随笔 - 67&
文章 - 0&评论 - 33&trackbacks - 0
下面是我自己对建造者模式的理解。具体我还没在开发中应用过,这只是对于书本的理解。
建造者模式
建造者模式:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。这是建造者模式的标准表达,不过看着让人迷惑,什么叫构建和表示的分离?一个对象使用构造函数构造之后不就固定了,只有通过它方法来改变它的属性吗?而且还要同样的构建过程搞出不同的表示,怎么可能呢?多写几个构造函数?
其实多写几个构造函数,根据不同参数设置对象不同的属性,也可以达到这样的效果,只是这样就非常麻烦了,每次要增加一种表示就要添加一个构造函数,将来构造函数会多得连自己都不记得了,这违背了开放-封闭的原则。
要不就只能设计几个set函数,每次属性不一样了,我就构造一个对象,然后用set函数改变对象的属性。这样也可以达到效果。只是代码就会非常冗余了,每个要用到这个对象的地方,都要写上好几句语句,一旦对象有点什么变化,还得到处都改一遍,这样就很容易出错,以后别人看着这种神逻辑和神代码估计也会崩溃了。而且这也违背了依赖倒转的原则。
于是大神们就开始想了,不能加很多构造函数,也不能直接用一堆set函数,然后发现,有些对象的构建是固定的几个步骤的,就像一条流水线一样,任何的产品都是通过每一个固定的步骤拼凑出来的。例如说一部手机,先放主板,再放屏幕,再放电池,再放外壳,贴个膜就能卖几千了,每次推出新产品,就换个更好的主板,换个大点的屏幕,再整个大容量电池,贴个超牛B的高透膜,又能卖出个新价钱。就是说,这些步骤都没有变,变的只是每个部分的东西。
这就是大神的厉害之处了,透过现象看本质,基本有变的,有不变的,那敢情好,面向对象的一个重要指导思想就是,封装隔离变化的,留出不变的。于是他们就用一个Builder类把步骤中的每个部分封装起来,这个类的主要作用就是生产每个部件,再抽象一下提升高度,这样就依赖倒转了,这样每次只需要添加一个类,这个类还是这几个部分,只是内部的实现已经不一样了,这样就满足了开放-封闭的原则了。但还是有一个问题,光有Builder类还不行,虽然产品的每个部分都有对应的函数,但是用起来的话,还是跟前面说的set函数一样,一用就要使用一大堆函数,也就是这变的东西是封装起来了,但这不变的东西还没留出来。这时,就添加一个Director类,这个类就是专门规定组装产品的步骤的,这样只要告诉Director使用哪个Builder,就能生产出不同的产品,对于客户端来说,只看到用了Director的一个construct函数,甚是方便。
再反过来看建造者模式的定义,构建指的就是生产一个产品的步骤,表示就是每个产品部分的具体实现,通过Director封装步骤,通过Builder封装产品部分的实现,再把他两隔离开,就能隔离变的,留出不变的供客户端使用。
图中可以看到,Product是必须要知道,没有抽象,但是这个产品却可以由不同的部分组合而成。Director里的construct也是固定,没有抽象出来,如果要更改步骤,也要添加一个函数,或者再添一个Diector,所以建造者模式一般应用于步骤不会发生大的变化,而产品会发生大变化的情况。
常用的场景
C#中的StringBuilder就是一个建造者的例子,但只是一个建造者,还缺一个Director,不能算一个完整的建造者模式。建造者模式一般应用于构建产品的步骤(也可以称为算法)不变,而每个步骤的具体实现又剧烈变化的情况。
1.隔离了构建的步骤和具体的实现,为产品的具体实现提供了灵活度。
2.封装和抽象了每个步骤的实现,实现了依赖倒转原则。
3.封装了具体的步骤,减少了代码的冗余。
1.要求构建产品的步骤(算法)是不能剧烈变化的,最好是不变的,这样就影响了灵活度。
C++实现代码
#ifndef _BUILDER_H_
#define _BUILDER_H_
#include &stdio.h&
class Product{
Product();
~Product();
void setPartA(int param);
void setPartB(int param);
void setPartC(int param);
void show();
int partA;
int partB;
int partC;
class AbstractBuilder{
AbstractBuilder();
virtual ~AbstractBuilder();
virtual void createProduct() = 0;
virtual void buildPartA(int param) = 0;
virtual void buildPartB(int param) = 0;
virtual void buildPartC(int param) = 0;
virtual Product* getProduct() = 0;
class Builder: public AbstractBuilder{
Builder();
~Builder();
void createProduct();
void buildPartA(int param);
void buildPartB(int param);
void buildPartC(int param);
Product* getProduct();
Product* curP
Builder.cpp
#include "Builder.h"
Product::Product()
Product::~Product()
void Product::setPartA(int param)
void Product::setPartB(int param)
void Product::setPartC(int param)
void Product::show()
fprintf(stderr,"partA = %d
partB = %d
partC = %d\n",partA,partB,partC);
AbstractBuilder::AbstractBuilder()
AbstractBuilder::~AbstractBuilder()
Builder::Builder()
:curProduct(NULL)
Builder::~Builder()
void Builder::createProduct()
fprintf(stderr,"创建一个产品空壳\n");
curProduct = new Product();
void Builder::buildPartA(int param)
fprintf(stderr,"正在构建产品的A部分\n");
curProduct-&setPartA(param);
void Builder::buildPartB(int param)
fprintf(stderr,"正在构建产品的B部分\n");
curProduct-&setPartB(param);
void Builder::buildPartC(int param)
fprintf(stderr,"正在构建产品的C部分\n");
curProduct-&setPartC(param);
Product* Builder::getProduct()
//我的理解就是产品交出去之后,怎么释放怎么弄就不归建造者管了
return curP
Director.h
#ifndef _DIRECTOR_H_
#define _DIRECTOR_H_
#include "Builder.h"
class Director
Director(AbstractBuilder* builder);
~Director();
void construct();
AbstractBuilder* curB
Director.cpp
#include "Director.h"
Director::Director(AbstractBuilder* builder)
curBuilder =
Director::~Director()
void Director::construct()
if (!curBuilder)
curBuilder-&createProduct();
curBuilder-&buildPartA(1);
curBuilder-&buildPartB(2);
curBuilder-&buildPartC(3);
client.cpp
#include "Director.h"
int main()
AbstractBuilder* builder = new Builder();
Director* director = new Director(builder);
director-&construct();
Product* product = builder-&getProduct();
product-&show();
g++ -o client client.cpp Builder.cpp Director.cpp
阅读(...) 评论()问:高分力求母巢之战虫族最后一关攻略
答:我只说一下我打过去的方法,你可以参考一下:(顺便说一下,我的手速很低,只有80左右,所以此方法你应该也能用)
首先,速出潜伏者,然后下,右路口各放4到6个,上口...
游戏知识人深度:中国大型航母为何这么难造 只有伟大强国才能建|中国|航母|军事_新浪军事_新浪网
深度:中国大型航母为何这么难造 只有伟大强国才能建
  新浪军事编者:为了更好的为读者呈现多样军事内容,满足读者不同阅读需求,共同探讨国内国际战略动态,新浪军事独家推出《深度军情》版块,深度解读军事新闻背后的隐藏态势,立体呈现中国面临的复杂军事战略环境,欢迎关注。
  在开始正文之前,我们先来看一个小故事:
  1993年,黑海造船厂厂长马卡洛夫向大家报告说:“‘瓦良格’号不可能再完工了……”
  大家问道:“为了将舰完工,工厂究竟需要什么?”
  马卡洛夫回答道:“苏联、党中央、国家计划委员会、军事工业委员会和九个国防工业部、600个相关专业、8000家配套厂家,总之需要一个伟大的国家才能完成它。”
  马卡洛夫继续说:“只有伟大的强国才能建造它,但这个强国已不复存在了。”
  凡事有了就不知道难。中国从乌克兰引进“瓦良格”号之后,自行研制的国产航母正式开工建造。按照尹桌将军透露的信息,中国拥有5~6艘航母是比较适宜的。因此,中国的国产航母,从大连造船厂的第一艘开始,无疑将马不停蹄地继续建造下去。虽然国内有一些人认为,“辽宁”舰只不过是在“瓦良格”号的基础上进行改装,其实也没有什么。说得倒轻巧,你改装一个试试!从改装走向建造,这意味着我国舰艇建造工业的一个飞跃。原因不为什么?因为建造大型航母真的,很难!
  实际上我国航母工程的起点,从20世纪60年代就已经开始了。早在20世纪60年代初期,当时任舰船研究院院长的刘华清将军就已经开始留意全球海军强国航母的发展和应用,思考过航母的研制问题。1970年,新中国历史上的第一个航母工程报告拟定,首次航母专题讨论也予以展开。
中国国产航母完成第14机库分段吊装
  按照那个时候的构想,刘华清等老一辈提倡建造的只是一型能够携带舰载战斗机和反潜直升机为主的护航航母。其主要战技术性能的设想包括:吨位在3万吨以内,航速35节左右,可以搭载舰载战斗机和反潜直升机50架左右;新航母采用垂直起降方式,这样就不需要飞机弹射器、助降装置、降落阻拦装置等一系列技术上极为复杂的专用设备。这样做的原因是航母的尺寸和吨位可以大幅缩小,研制周期能够大大缩短。
  除了上述这些建议,刘华清等人还建议,新航母应当拥有强大的进攻和防御武器,远程防空由舰载战斗机负责,中程目标由防空导弹负责,近程由低空达到您和小口径火炮来拦截,潜艇等目标交由反潜直升机来对付。考虑到搭载的主要是舰载战斗机和反潜直升机,因此该型航母应当配备射程为500-600千米的反舰导弹。
  日,国防部例会上公布了我国建造第二艘航母的消息,振奋人心。有网友根据公开资料,用电脑效果图显示了中国航母的发展路线。(鸣谢:西葛西造舰)
  如果用现在的眼光来看,1970年时我国设想的航母非常类似于俄罗斯的“基辅”级航母,相比之下吨位可能要小一些。但是在那个年代,由于我国国防工业技术水平的限制,建造这样的航母也是难以完成的。后来,中国争取一切可以获得的机会四处取经,不管是苏联,还是美国。然而,考虑到技术水平,以及当时我国的财力物力情况,所以航母工程不得不一拖再拖。不要说大型航母了,就是这样的航母也难以完成。
  能够买到“瓦良格”号,对于我国来说是天大的机会。对于这艘航母,印度当初是不敢接盘的。因为它的航母都比较小,一下子跳这么大一步,印度人还没有这么强的心理准备。从印度航母的发展历程来看,我们也会看到它还是趋向于比较保守。那么,究竟建造大型航母有何难呢?
  首先,航母不仅仅是一艘巨大的战舰,还是一个微缩版的城市。在这座城市上,舰载机的起降功能需要具备,航母的航行性能必须有所保障,舰上的各个舱室布局应当合理,舰岛上部的电子设备必须相兼容不能打架。无论是生活,还是作战,一切都务必能够有序地进行。航母上有几千人啊,别的不说,你看看建造一栋能够容纳上千人的大楼,都得细密再细密,一旦出错,到时候问题就很大。航母这个大家伙比一栋大楼的复杂程度高多了,里面的舱室就像蜂窝一般,管线密布,绝不是我们平时看到的甲板上那些舰载机和一条船如此简单。
  其次,航母不仅仅是一艘战舰,还是一个超级发电站、一个巨大的军火库、一个非常紧凑的机场、一座巨大的钢铁猛兽。除了前面提到的作战和生活功能,航母还必须能够跑起来,满排好几万吨乃至上市万吨的巨兽可不是闹着玩的。航母跑起来,需要有强劲的动力,这涉及到发动机工业。军火库里面花样繁多的弹药,需要有强大的武器制造工业来提供支撑。航母是一个紧凑型机场,300多米的跑道就应当具备陆上机场上千米跑道的功能。
  再则,航母是大型舰艇编队的核心。没有航母,再强大的舰队也是散兵游勇,没有护航舰艇和舰载机,再强大的航母也是光杆司令。也就是说,你要有强大的航母编队,绝非建造一条航母和配几架飞机那么简单。航母的配套舰艇和飞机,不应当和航母本身打架,性能发挥不出来,那还不如不建造航母,建造航母花费的可是海量的资金和材料。因此,航母工程,绸缪于几十年之前,拉出去协同得当,没有问题,才能够是真正有效的作战力量。
  上述这三点,牵涉到的包括船厂、飞机制造厂、弹药工厂、发动机厂、钢铁铸造厂、线缆厂、电子设备厂、雷达厂、武器生产厂家以及相应的科研机构,甚至还需要很多其他无名的研究与生产机构的默默奉献。这里面牵涉到的人,少则数十万人,多则上百万人。要将如此多人的成果集中在一条船上,难度可想而知。因此,即便是到现在,能够建造满载排水量超过6万吨航母的国家,五个指头都能够数完,其实就是美、俄、英、中。(注:印度还没有开始建造那条6万吨的国产航母,所以暂时还不能算。)
  总之,建造航母是一个非常复杂、非常庞大的工程。我国能够从改装走向批量生产,表明已经完全掌握了航母的相关技术及其管理经验,这是非常难得的。航母的单位用艘来表示,其实每一艘都是一个大国工业的缩影。中国走到现在这一步,其间的道路荆棘丛生,其间的艰辛难以用文字来形容,但这一步,我们做到了!难道我们不应当为拥有自己的航母工业而自豪么?(作者署名:云上的空母 请搜索微信公众号:云上的空母)
  本栏目所有文章目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。凡本网注明版权所有的作品,版权均属于新浪网,凡署名作者的,版权则属原作者或出版人所有,未经本网或作者授权不得转载、摘编或利用其它方式使用上述作品。
  新浪军事:最多军迷首选的军事门户!
责任编辑:薛贺 SN118他的最新文章
他的热门文章
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)求助啊,手机一直显示耳机模式,明明没有插着耳机啊,怎么办?不用耳机就不能正常使用了?三星S4
全部答案(共4个回答)
接触到一起了…牙签挑一下就好了
应该是你插过耳机听歌突然拔出来造成的。 重新插上耳机,听一下歌,然后把音乐关了再拔耳机线。 (如还有不明,欢迎追问!该回答对您有帮助的话,请“好评”哦,谢谢!)
我试了又试,终于找到方法了,你长按*键,会转换模式,耳机模式就消失了,再将情景模式调回来就OK了
找一个尖的硬的东西(镊子之类),刮手机下方耳机那排插孔,把外面的脏东西清理干净,在插耳机看看行不行,如果不行到手机维修换耳机插孔,15到25元!
屏幕外的话是没有什么事的。只要不进入屏幕里面就行了!如果你担心手机又事可以下载个 测试屏幕的软件测试一下。
对了分享个小秘密:如果网购的话,
记得从★追折网★经...
手机显示耳机模式,为手机充电短路引起,部份手机进液或进灰也造成此情况。(建议,包修型可以去售后作免费维修或更换;非保修只能外作专业维修处理good lucky!...
答: 为什么新款iPhone总缺货?
答: 您好,这个直接输入账号就可以了!
答: 数码照片是什么含义呢
答: 不能。芯片都不一样。
大家还关注
Copyright &
Corporation, All Rights Reserved
确定举报此问题
举报原因(必选):
广告或垃圾信息
激进时政或意识形态话题
不雅词句或人身攻击
侵犯他人隐私
其它违法和不良信息
报告,这不是个问题
报告原因(必选):
这不是个问题
这个问题分类似乎错了
这个不是我熟悉的地区
相关问答:123456789101112131415

我要回帖

 

随机推荐