程序员如何应对北上广高房价示例解说建造者模式

一、前言

最近北上广的房价蹭蹭的往上涨,如果你不买房房价再高和你一点毛关系都没有;但是大多数的人还是要面临买房子的。

北上广IT创业比重还是相当高的,所以众多的程序员面临着贵如天价的房子,有苦说不出。

无论房价怎么的涨,无论房价怎么的高,我们写程序的要笑对生活;要热爱工作,热爱人民,热爱社会主义,始终拥护党的领导!

扯房子扯的有点远了,我们下面回归今天的重点-建造者模式。

二、基本概念

建造者模式(Builder Pattern):将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。建造者模式又可以称为生成器模式。

建造者模式包含四个角色:产品角色,抽象建造者角色,具体建造者角色,指挥者角色

汽车示例:

很好理解,比如书上说的汽车例子,汽车是一个复杂的对象,它包括车轮、方向盘、发送机等各种部件。不同的车有不同的配置,而对于我们而言,仅需一辆汽车,无须知道哪些部件组成的。

可以通过建造者模式对其进行设计与描述,建造者模式可以将部件和其组装过程分开,一步一步创建一个复杂的对象。

用户只需要指定复杂对象的类型就可以得到该对象,而无须知道其内部的具体构造细节。

但是如果你在上海有车也牛逼不了,你必须要有上海的车牌,想要有上海的车牌必须要有至少8万元人民币,有了这钱你也不一定能拍到车牌(这是多少有钱人的痛)!有上海的车牌你也未必比骑自行车去上班的先到公司。哈哈。又扯远了。

肯德基套餐示例:

建造者模式可以用于描述KFC如何创建套餐:套餐是一个复杂对象,它一般包含主食(如汉堡、鸡肉卷等)和饮料(如果汁、 可乐等)等组成部分,不同的套餐有不同的组成部分,而KFC的服务员可以根据顾客的要求,一步一步装配这些组成部分,构造一份完整的套餐,然后返回给顾客。

如果还不理解,我给你细说一个程序员面对北上广高房价如何应对的例子你就理解了。

三、代码示例

示例代码如下:

 //产品角色:房子
        public class House
        {
            //房子由多个房间组成
            IList<string> _rooms = new List<string>();

            //添加房间
            public void AddRoom(string room)
            {
                _rooms.Add(room);
            }

            //返回所有的房间
            public void GetRooms()
            {
                Console.WriteLine("房子户型:");
                foreach (var room in _rooms)
                {
                    Console.WriteLine(room);
                }
            }
        }

        //抽象建造者:建房子
        public abstract class BuildHouse
        {
            //房子要满足基本的:吃、喝、拉、撒、睡

            //厨房
            public abstract void BuildCitchen();
            //卫生间
            public abstract void BuildBathroom();
            //卧室
            public abstract void BuildBedroom();
            //客厅
            public abstract void BuildLingingroom();

            //返回房子
            public abstract House GetHouse();

        }

        //具体建造者:农村自建 450平4室2厅2卫1厨2层别墅   造价20万
        public class CountyHouse : BuildHouse
        {
            private readonly House _house = new House();
            //厨房
            public override void BuildCitchen()
            {
                _house.AddRoom("50平超大厨房");
            }
            //卫生间
            public override void BuildBathroom()
            {
                _house.AddRoom("50平超大卫生间1");
                _house.AddRoom("50平超大卫生间2");
            }

            //卧室
            public override void BuildBedroom()
            {
                _house.AddRoom("50平超大卧室1");
                _house.AddRoom("50平超大卧室2");
                _house.AddRoom("50平超大卧室3");
                _house.AddRoom("50平超大卧室4");
            }

            //客厅
            public override void BuildLingingroom()
            {
                _house.AddRoom("50平超大客厅1");
                _house.AddRoom("50平超大客厅2");
            }

            //返回房子
            public override House GetHouse()
            {
                return _house;
            }
        }

        //具体建造者:北上广深购买   60平1室1厅1厨1卫 平均4万一平也要240万
        public class CityHouse : BuildHouse
        {
            private readonly House _house = new House();
            //厨房
            public override void BuildCitchen()
            {
                _house.AddRoom("10平厨房");
            }
            //卫生间
            public override void BuildBathroom()
            {
                _house.AddRoom("10平卫生间");
            }

            //卧室
            public override void BuildBedroom()
            {
                _house.AddRoom("20平卧室");
            }

            //客厅
            public override void BuildLingingroom()
            {
                _house.AddRoom("20平客厅");
            }

            //返回房子
            public override House GetHouse()
            {
                return _house;
            }
        }

        //指挥者角色:指挥房子建造过程
        public class Director
        {
            public void Builder(BuildHouse house)
            {
                house.BuildCitchen();
                house.BuildBathroom();
                house.BuildBedroom();
                house.BuildLingingroom();
            }
        }

客户端调用代码:

        static void Main(string[] args)
        {
            //实例化指挥者
            Director director=new Director();

            //实例化农村建别墅
            CountyHouse countyHouse=new CountyHouse();
            director.Builder(countyHouse);
            House house = countyHouse.GetHouse();
            house.GetRooms();

            //实例化北上广深购买
            CityHouse cityHouse = new CityHouse();
            director.Builder(cityHouse);
            House house1 = cityHouse.GetHouse();
            house1.GetRooms();

            Console.ReadKey();
        }

运行效果:

房子是一个复杂对象,它要保证人的基本生活吃喝拉撒睡,一般包括卧室、厨房、卫生间、客厅等房间组成部分,不同的房子有不同的组成部分(例如一室户小户型,三室大户型),而房地产开发商可以装配出各种户型满足不同人的需求,然后高价卖给人民。

四、总结

1、客户端只关注需要的产品,不需要产品的具体内部组成。

2、客户端可以根据不同的具体创建者获得不同的产品。

3、和抽象工厂相比,建造者模式返回完整的产品实例;抽象工厂是返回一系列相关产品

【比如MSSQL的CURD和 MongoDB 的CURD;装修时家用电器是用格里(洗衣机,电视,空调,电冰箱……)的还是用海尔洗衣机,电视,空调,电冰箱……】

4、抽象工厂模式可以理解为是创建的具体家用电器(洗衣机,电视,空调,电冰箱……),建造者模式是创建的电器品牌的实例(格里,海尔)

示例代码下载:https://yunpan.cn/cYWPthPAWtVgd (提取码:2cac)

时间: 2024-08-24 01:45:01

程序员如何应对北上广高房价示例解说建造者模式的相关文章

Java程序员除了「北上广深」其它地方能拿到30K吗?

金三银四面试已经结束了,最近跟朋友在一起聚会的时候提了一个问题,说Java程序员月薪如何达到30K,技术水平需要达到什么程度? 有人回答说这只能是大企业或者互联网企业工程师才能拿到.也许是的,小公司或者非互联网企业拿到30K的不太可能是码农了,应该已经转管理.还有区域问题,这个是不在我的考虑范围内的,因为除了北上广深杭,其他地方也很难得到. 首先:30K对应的层级分别是什么? 30K的月薪在BAT等一线大厂实在太普遍了,一般是高级工程师和资深工程师的职位,在阿里是p6~p7左右,在百度是t5左右

程序员怎么应对非软件型公司?

最近工作感觉很不顺,心理也不开心,就是感觉自己无论怎么努力,别人都没有把程序员当成是人来看待.心理觉得委屈.就比如,平时老板也不重视技术团队,开发人员占比不足30%,但其他70%的人都可以指挥开发人员干活,包括写代码.开发demo,网站的部署搭建,造测试数据或者说是demo数据.帮忙填坑改bug等等.我觉得自己虽然不算是一个非常仔细的程序员,但是我已经竭尽所能的去尽快完成工作.可是最后总是莫名的开始,并不愉快的结束.就比如最近发生的一件事情,我本来在一个项目组中工作,后来另一个组做Demo人手不

2015程序员值得收藏的十大主流android button模式

1.超炫ArrowDownloadButton下载按钮从点击到下载完成特效 http://www.itlanbao.com/code/20150901/10000/100496.html 2.挺赞的带进度动效Button http://www.itlanbao.com/code/20150805/10037/100127.html 3.让人眼前一亮android-ui http://www.itlanbao.com/code/20150805/10037/100125.html 4.一键多用的R

迷茫的程序员 迷茫的路

程序员是一个特殊的群体,我们不知道为什么加入这个行业,也不知道这个行业还能做多久,不同人有着不同的故事.有着不同的迷茫. 傻子太多,骗子都不够用了! 在技术圈,充满着各种所谓的技术大神,他们在各自的领域有着这样那样的建树.有的大神是真的,然而有一小部分"大神",是假的,也就是所谓的骗子大神.当然,这个行业新手更多,密密麻麻,黑压压的一片.新手们热情澎湃,追随着他们眼中的大神,期待有一天自己也能像大神们一样技术好.工资高.然而又有多少人真正地追上了大神的脚步呢? 很多小白,看见一个技术差

程序员的发展方向

程序员的收入是广受关注的问题,很多人从业3~5年之后就会遇到这个收入瓶颈.尽管物价不断上涨,程序员尤其是初.中级程序员的收入不升反降.即使上次在某个文章中看到有中国第一程序员之称的某位,月薪也只有3万,尽管这个数字已经很高了,但这个"中国第一",也只有众多小型软件企业总监级别的收入而已.为什么这么高水平的技术人员在公司中的位置仍然显得与日俱降?本文会分析其中的原因,并依据原因给出相应的建议,为收入遇到瓶颈的程序员找到出路. 要理解一个人能赚多少钱,先要理解钱的流转规律.对于程序员,总是

雷观(十五):提高生产力和程序员价值的2种方法

Web项目,尤其是Web管理系统,被很多程序员认为没有技术含量.这种项目,主要功能就是增删改查,尤其是查询方面,更是多种多样. 因为这种项目本身的业务就是简单的CRUD,没有太多复杂的业务逻辑.然而,CRUD这种功能却又是最基本的功能,如果只是复制粘贴修改,程序员和建筑民工没啥区别了. 建筑民工本身就是体力+简单的智力,高级的建筑工人会有自己的一套建筑方法,做起事来高屋建瓴,井井有条. 低级程序员-码农也是体力+简单的智力,高级程序员除了知识比较广比较深外,更主要的他们能够避免重复的劳动,提高生

(转)史上最全的程序员求职渠道总结

转自http://m.blog.csdn.net/blog/foruok/46798495 我前前后后写过多篇与程序员找工作相关的文章,比如程序员跳槽神级攻略,找工作的辟邪剑谱,任性,春节前辞职,程序员该不该考虑初创公司,这些文章都收录在我的漫谈程序员专栏里,它们从跳槽时机.跳槽原因.简历优化等不同侧面讨论了程序员找工作的那些事儿,受到很多人的关注.今天呢,我准备专门分析一下程序员求职渠道,有料是必须的,就算你搜遍互联网深挖全宇宙,也会发现这篇文章将是史上最全.最强.最有针对性的程序员求职渠道分

程序员都讨厌开会?

据说程序员都讨厌开会,不知道是不是都,但我确实也不喜欢.「小道消息」的 Fenng 曾经写过在阿里的后两年,他负责数据库团队时,每周会议也是多到让其感觉无法忍受.程序员讨厌写文档是出了名的,但讨厌开会的程度是讨厌写文档的立方,以上推论来自漫画<神秘的程序员>,如下: 有哪些会? 当我打算写这个主题时,反思了下过去都参加过哪些会议,发现有时会莫名其妙的就参加了一些完全无意义的会议.下面我们先看看一般程序员都会碰到哪些会议. 需求会 这类会议一般是产品或项目经理召集,组织参与项目的程序员一起讨论需

北上广深程序员,月薪三万不如狗

曾经在北上广深,程序员是一个外表多么光鲜的职业. 程序员毕业五年左右,月收入一般可以达到两三万块.周末下馆子,一个月出去旅行一趟,供的起房子.买的起车子,这样的生活令多少人羡慕. 虽然码农的生活加班比较苦,但倒也衣食无忧.高收入令程序员自带高大上的光环,找女朋友也容易. 多少漂亮的MM,换过几任男朋友之后,都一致认为非程序员不嫁.可见程序员是多么炙手可热的职业. 然后,随着社会的发展,一线城市的房价水涨船高.很多地方,一平方米的房子,已经高达5~10万.已经超出了程序员的可承受范围之内.正常程序