01工厂方法在追MM。请吃饭是少不了的。麦当劳鸡翅和肯德基鸡翅都是MM们的最爱。虽然味道不一样,但不管带MM去吃麦当劳还是肯德基,跟服务员说“四只鸡翅”就可以了。麦当劳和肯德基是生产鸡翅的Factory工厂模式:顾客类和工厂类是分开的。每当消费者需要某种产品时,他只需要向工厂提出要求即可。消费者接受未经修改的新产品。缺点是修改产品时,工厂类也必须做相应的修改。如:如何创建,如何提供给客户。02建造者模式MM们最喜欢听到那句“我爱你”。当你看到不同地方的MM时,你一定会用他们的方言对她说这句话。我有一个多语言翻译器。上述每种语言都有一个按钮。当我看到MM时,只需按下相应的按钮,它就会用相应的语言说“我爱你”。外国MM也可以轻松搞定。这就是我。“我爱你”建设者。构造模式:将产品的内部外观与产品的生产过程分离,使一个构造过程可以生成具有不同内部外观的产品对象。该构造模式使产品内部外观可以自主改变,客户无需了解产品内部构成的细节。构建模式强制执行逐步构建过程。03抽象工厂请MM去麦当劳吃汉堡。不同的MM有不同的口味。记住每一个都很烦人。我一般用FactoryMethod模式,带MM到服务员那里,说“我要汉堡包”。》,你要什么汉堡,让MM直接告诉服务员就行了。工厂方法模式:核心工厂类不再负责所有产品的创建,而是将具体的创建工作交给子类,成为一个抽象工厂角色,只负责给出具体工厂类必须实现的接口,不涉及具体应该实例化哪个产品类的细节。04原型模式和MM聊QQ,一定要说几句情话,我收藏了很多讨厌的情话,需要的时候,直接复制出来放在QQ里。这是我的情话原型。(100元一份,要不要)原创模型模式:通过给一个原型对象给指明要创建的对象的类型,然后通过复制原型对象来创建更多相同类型的对象。原始模型模式允许动态增加或减少产品类别。产品类别不需要有任何预定的层次结构.原始模型模式适用于任何层次结构。缺点是每个类都必须配备克隆方法。05单态模式我有6个漂亮的老婆,她们的老公都是我,我就是我们家的老公Sigleton。只要说“老公”,都是指同一个人,就是我(刚刚做了个梦啦,哪有这么好的东西)单例模式:单例模式保证只有一个实例某个类的,并实例化自己并将这个实例提供给整个系统。单例模式应该只在有真正的“单一实例”需求时使用。06Adaptermode在朋友聚会上认识了香港美女Sarah,但是我不会粤语,她也不会普通话,只好求助朋友Kent。他是我和莎拉之间的适配器。让我和Sarah互相对话(不知道他会不会玩我)Adapter(transformer)模式:将一个类的接口转换成客户期望的另一个接口,让原来的接口不匹配两个类不能一起工作的可以一起工作。适配器类可以根据参数返回一个合适的实例给客户端。07BridgeMode早上遇到MM想说早安;晚上遇到MM要说晚安;遇到穿新裙子的MM,你想说你的衣服好漂亮;说你的头发真漂亮。别问我“早上遇到换了新发型的MM你说什么?”只需使用BRIDGE自行组合即可。将它们之间的强关联变为弱关联,就是在软件系统的抽象和实现之间使用组合/聚合关系,而不是继承关系,使两者可以独立变化。08复合模式今天是玛丽的生日。“今天是我的生日,你要送我礼物。”“嗯嗯,你自己去店里挑吧。”“这件T恤很漂亮,买吧,这件衣服很漂亮,买吧,这包也不错,买吧。”“哎,我买了三件,只答应送一件作为礼物。”“什么,T恤、裙子、包包就是一套,小姐,请包起来。”……,MM会用到Compositemode,你明白了吗?Compositionmode:Compositionmode组织对象成树状结构,可以用来描述整体和部分之间的关??系。复合模式是处理对象的树形结构的模式。复合模式用树结构表达部分和整体之间的关系。复合模式允许客户端将单个组件对象视为与由它们组成的复合对象相同。09装饰模式Mary过完生日,就轮到Sarly过生日了。别让她自己选,不然这个月的伙食费肯定花光了。拿出去年在华山山顶拍的照片,在背面写上“最好的礼物是爱你的菲塔”,然后去街边的礼品店买了一个相框(MM卖礼物的也很漂亮),还请隔壁搞美术设计的Mike设计了一个漂亮的盒子装进去……,我们都是装饰师,最后都在装饰我怎么样?你明白吗?装饰模式:装饰模式以对客户端透明的方式扩展了对象的功能,它是继承关系的一种替代,提供了比继承更大的灵活性,动态地给一个对象添加功能,并且这些功能是可以动态撤销的。添加了非常多的功能,这些功能都是由一些基本功能的排列组合而成。10Fa?ademode我有一个专业的尼康相机,我喜欢手动调节光圈和快门,所以我拍的照片很专业,但是MM教了半天也不懂这些东西。幸运的是,相机具有Facade设计模式。如果将相机设置为自动模式,只需对准目标并按下快门即可。一切都会由摄像头自动调整,让MM也可以用这个摄像头给我拍照。门面模式:与子系统的外部通信必须通过统一的门面对象来完成。Facade模式提供了一个高级接口,使子系统更易于使用。每个子系统只有一个门面类,这个门面类只有一个实例,也就是说是单例模式。但是整个系统可以有多个外观类。11飞元模式天天跟MM发短信,手指累死了。最近买了一部新手机,手机里可以存一些常用的句子。随时可以发送,无需逐字输入。共享句是Flyweight,MM的名字是提取的外部特征,根据上下文使用。蝇量级模式:FLYWEIGHT指的是拳击比赛中的最轻量级。Flyweight模式以共享的方式有效地支持大量细粒度的对象。享元模式共享的关键是区分内在状态和外在状态。内在状态存储在享元内部,不会随环境变化。外在状态随着环境的变化而变化。外在状态不能影响内在状态,它们相互独立。将可以共享的状态和不能共享的状态从常规类中分离出来,不能共享的状态排除在类之外。客户端不能直接创建共享对象,而应该使用一个负责创建共享对象的工厂对象。享元模式大大减少了内存中的对象数量。12代理模式在网上和MM聊天,开头总是“嗨,你好吗”,“你是哪里人?”“你今年多大?”“你有多高?”这些话真烦人,写个程序做FormyProxy,收到这些话就自己设置answer,收到其他话就通知我answer,怎么样,爽。代理模式:代理模式为对象提供代理对象,代理对象控制对源对象的引用。代理是指一个人或机构代表另一个人或机构行事。在某些情况下,客户端不想或不能直接引用一个对象,代理对象可以直接在客户端和目标对象之间起到中介作用。客户端无法区分代理主题对象和真实主题对象。代理模式可能不知道真正的代理对象,只是持有代理对象的一个??接口。此时代理对象无法创建代理对象,必须由系统其他角色创建并传入代理对象。13ChainofResponsibilityMode晚上去上英语课,坐在最后一排刚好走开,哇,前面坐了好几个美女MM。嘿,找一张纸条,写上“嗨,你能做我的女朋友吗?”不想请转发”纸条一张一张递上去,不好,传到第一排的MM把纸条递给老师,听说她是老处女,跑路!责任链模式:在责任链模式中,许多对象通过每个对象对其下一个家的引用连接起来形成一个链。请求在链上传递,直到链上的对象决定处理该请求。客户端不知道链上的哪个对象最终会处理请求,系统可以在不影响客户端的情况下动态重组链并分配职责。处理者有两种选择:接受责任或将责任转嫁给下一方。请求可能最终不会被任何接收者对象接受。14命令模式我有一个MM,家里管的很严,见不得人,我们之间只能靠她哥发消息。如果她对我有任何指示,她会写一张便条,让她的兄弟带给我。这不,她的弟弟又发来了一条指令。为了感谢他,我请他吃了一碗杂酱面,他却说:“我会同时给姐姐的三个男朋友发COMMAND,你是最便宜的,请我吃面。”命令模式:命令模式将一个请求或操作封装到一个对象中。命令模式将发出命令的责任与执行命令的责任分开,并将它们委托给不同的对象。命令模式让请求方和发送方相互独立,使得请求方不需要知道接收方的接口,更不用说请求是如何接收的,操作是否执行,什么时候执行,以及它是如何执行的。系统支持撤销命令。15翻译模式我有一个《泡 MM 真经》,上面有各种做MM的攻略,比如吃西餐的步骤,怎么看电影等等。和MM约会的时候,就做一个翻译,跟着上面的脚本执行得很好。解释器模式:给定一种语言,解释器模式可以定义其语法的表示并同时提供解释器。客户可以使用此翻译器来翻译此语言的句子。解释器模式将描述如何使用给定简单语法的模式设计来解释这些语句。解释器模式中提到的语言是指任何解释器对象都可以解释的任何组合。在解释器模式下,需要定义一个代表语法的命令类层次结构,即一系列的组合规则。每个命令对象都有一个explain方法,表示对命令对象的解释。命令对象层次结构中对象的任何排列和组合都是一种语言。16Iterations我爱上了玛丽,拼命地向她求婚。玛丽:“如果你想让我嫁给你,你必须同意我的条件”我:“我会同意任何条件,只要告诉我”玛丽:“我爱上了那颗一克拉的钻石”我:“我要买,我要买,还有吗?”Mary:“我对湖边那栋别墅感兴趣”我:“我买,我买,还有吗?”Mary:“我对那辆法拉利跑车很感兴趣”我的脑袋嗡嗡作响,坐在椅子上,咬牙切齿:“我买,我买,还有吗?”迭代模式:迭代模式可以顺序访问元素在一个集合中而不暴露集合的内部表象。多个对象形成的聚合称为聚合,聚合对象是一个容器对象,可以包含一组对象。迭代子模式将迭代逻辑封装成一个自包含子对象,从而与聚合本身隔离。迭代方式简化了聚合接口。每个聚合对象可以有一个或多个迭代器子对象,每个迭代器的迭代状态可以相互独立。迭代算法可以独立于聚合角色变化。17调解员模式四个MM打麻将,谁给谁谁都分不清楚,幸好当时我在旁边,钱是按人数算的芯片。赚到钱的从我这里拿走,亏钱的也给我付钱,一切都OK,接到了四个MM的电话。调解器模式:调解器模式包装了一组对象交互的方式,这样这些对象就不必显式地相互交互。从而允许它们松耦合。当一些对象之间的交互发生变化时,不会立即影响到其他一些对象之间的交互。保证这些效果可以彼此独立地变化。Mediator模式将多对多交互转换为一对多交互。中介者模式抽象了对象的行为和协作,将对象的小规模行为与其他对象的交互分开。18备忘模式当同时和几个MM聊天时,一定要记住刚才对MM说的话,否则MM知道了会不高兴的。幸运的是,我有一个备忘录。复印一份保存在备忘录中,方便随时查看以前的记录。备忘录模式:备忘录对象是用于存储另一个对象的内部状态快照的对象。备忘录模式的目的是在不破坏封装的情况下捕获对象的状态,将其外化并存储,以便将来在适当的时候将对象恢复到存储的状态。19观察者模式您想了解我们公司最新的MM信息吗?加入公司MM情报邮箱群即可。汤姆负责收集情报。他不需要将他发现的新信息一一通知我们,而是直接发布到邮件群。作为订阅者(观察者),我们可以及时收到信息。观察者模式:观察者模式定义了多组依赖关系,允许多个观察者对象同时监视某个主体对象。当状态发生变化时,这个主题对象会通知所有观察者对象,使它们能够自动更新自己。20状态模式和MM约会,一定要注意她的状态。在不同的状态下,她的行为会有所不同。比如你约她今晚去看电影,对你不感兴趣的MM就会说“我有事”。啦啦”,不讨厌你还没喜欢你的MM会说“好吧,不过我可以带同事吗?”已经喜欢你的MM会说“几点了?看完电影去泡吧怎么样?”当然,如果看电影的时候表现不错,也可以把MM的状态从讨厌或者不喜欢变成喜欢。状态模式:状态模式允许一个对象改变它的状态当其内部状态发生变化时的行为。对象看起来已经改变了它的类。状态模式将所研究对象的行为包装在不同的状态对象中,每个状态对象都属于抽象状态类的子类。状态的意图状态模式是允许对象在其内部状态发生变化时改变其行为。状态模式需要为系统可能达到的每一种可能状态创建State类的子类。当系统状态发生变化时,系统改变选择的子类.21攻略模式和不同类型的MM约会,需要使用不同的攻略,有的最好去看电影,有的最好吃零食,有的最好去海边为了浪漫。我的追MM包里有很多攻略。策略模式:策略模式将每个算法封装到一个单独的类中,对一组算法有一个通用的接口,这样它们就可以相互替换。策略模式允许算法改变而不影响客户端。策略模型将行为与环境分开。环境类负责维护和查询行为类,具体策略类提供各种算法。由于算法和环境是独立的,所以算法的增减修改不会对环境和客户端产生影响。22TemplateMethodPattern经典文章《如何说服女生上床》看过吗?女生上床的步骤分为巧合、打破僵局、追求、接吻、前戏、动手、爱抚、进入(模板法)八个步骤,但每个步骤因情况不同而不同。做法,就看你的应变能力了(具体实现);模板方法模式:模板方法模式准备一个抽象类,以具体方法和具体构造函数的形式实现部分逻辑,然后声明一些抽象方法强制子类实现剩下的逻辑。不同的子类可以用不同的方式实现这些抽象方法,从而对剩余的逻辑有不同的实现。先制定一个顶层的逻辑框架,将逻辑的细节留给具体的子类去实现。23访客模式情人节到了,想给每个MM送一束花和一张卡片,但是每个MM送的花必须根据她的个人特点,每张卡片都要根据她的个人特点来选择.一个人怎么能算清楚呢?让花店老板和礼品店老板做客,让花店老板根据MM的特点选一束鲜花,让礼品店老板根据每个人的特点选卡,这样就轻松多了;访问者模式:访问者模式的目的是封装一些应用于某些数据结构元素的操作。一旦这些操作需要修改,接收这个操作的数据结构可以保持不变。访问者模式适用于数据结构相对未定义的系统。它解耦了数据结构和作用于该结构的操作之间的耦合,使得操作集可以相对自由地演化。访问者模式使得通过添加新的访问者类来添加新操作变得容易。访问者模式将相关行为集中到一个访问者对象中,而不是将它们分散到单个节点类中。使用Visitor模式时,将尽可能多的对象浏览逻辑放在Visitor类中,而不是放在其子类中。访问者模式可以跨越多个类层次结构来访问属于不同层次结构的成员类。来源|zhuanlan.zhihu.com/p/100746724
