当前位置: 首页 > news >正文

谁是面向对象的设计霸主?(上)

         在取向的对象世界,永远没有最好的设计模式最强。每种模式从来没有任何人谁也不服,每个内讧。绝不放手。今天。连同简单工厂模式,包括24设计模式聚集在中原,间。乌云密布。杀气冲天,面向对象的世界里要迎来一场浩劫。血雨腥风,在所难免

         在资格赛中,来自工厂家族的简单工厂模式首先被灭掉了,其致命的失误在于简单工厂模式根本不符合开放—封闭原则,因此慘遭灭门也是不足为怪的。然而让人欣慰的是,工厂家族的另两个派系工厂方法模式和抽象工厂模式都晋级了小组赛,而且被分在了同一组,这样看来他们不得不自相残杀。其命运令人堪忧啊。

         我们来看看各个模式的分组情况:首先是创建型模式小组。分别包括单例模式、工厂方法模式、抽象工厂模式、建造者模式和原型模式5个派系,其次是结构型模式小组:分别包括适配器模式、装饰模式、桥接模式、组合模式、享元模式、代理模式以及外观模式7大实力强劲的门派,因为本组的各个模式实力都比較强,因此也被称为死亡之组,最后是行为型模式组。因为这一组的的派系较多。被分为了两个小组:行为一组和行为二组。先来看行为一组都有谁。观察者模式、模板方法模式、命令模式、状态模式和职责链模式。行为二组有解释器模式、中介者模式、訪问者模式、策略模式、备忘录模式、迭代器模式。

         首先,我们了解一下创建型模式组的各个模式都有什么过人之处,怎样能在面向对象的设计中占有一席之地,以至于可以称霸武林。

         抽象工厂模式:提供一个创建一系列或者相关依赖对象的接口,而无需指定它们详细的类。

         建造者模式:将一个复杂对象的构建与它的表示分离。使得相同的构建过程能够创建不同的表示。

         工厂方法模式:定义一个用于创建对象的接口,让子类决定实例化哪一个类,工厂模式使一个类的实例化延迟到其子类。

         原型模式:用原型实例指定创建对象的种类,而且通过拷贝这些原型创建新的对象。

         单例模式:保证一个类仅有一个实例,而且提供一个訪问它的全局訪问点。

         大家各就各位后,開始了激战:抽象工厂模式说:创建型模式的优势在于隐藏了这些类的实例是怎样被创建和放在一起的,整个系统关于这些对象所知道的是由抽象类所定义的接口。

如此一来,创建型模式在创建了什么,谁创建的,怎么被创建的以及何时创建的等方面提供了非常大的灵活性。

         原型模式使出了自己的绝招:我们能够建立对应数目的原型并克隆他们通常比每次用合适的状态收工实例化该类更方便一些。

         建造者模式也用了独门武功:我们将一个复杂对象的构建与它的表示分离,如此便可轻松地改变一个产品的内部表示,而且使得构造代码和表示代码分开。这样对客户来讲,无需关心产品的创建过程。而仅仅要告诉我们须要什么就能够用相同的构建过程创建不同的产品出来。

         单例模式略显单薄,但也不甘示弱:对一些类来说。一个实例是很重要的,一个全局对象能够使得一个对象被訪问。可是不能防止客户实例化多个对象,而我们的独门秘籍就是让类自身负责保存它的唯一实例。同一时候将类外的实例化道路封死,而且提供一个訪问该实例的方法,这样就使得对唯一实例能够严格地控制客户如何以及何时訪问它。

         最后工厂方法模式放出了大招。顿时天昏地暗:天下设计,无不源自工厂。当设计者发现须要更大的灵活性时。方才向其它创建型模式演化!

溯其本源,在我工厂!

         果然是杀伤力极强的武功。尽显王者风范,终于的结果不言而喻

版权声明:本文博客原创文章。博客,未经同意,不得转载。

相关文章:

  • Java 兑换ObjectC代码
  • [老老实实学WCF] 第三篇 在IIS中寄存服务
  • cocos2d 缓存池 对象的再利用
  • 部署DNS服务
  • Skype for Business Server 2015-13-IISARR-2-发布-1-OWA-ECP
  • AFNetworking 使用总结 (用法+JSON解析)
  • 【Nginx】磁盘文件写入飞地发
  • Mvc基础(1)
  • CSharp获取图形文件的读写
  • leetcode 137 Single Number II
  • Office 365系列之十四:配置自定义URL访问个人Portal和网页版Outlook
  • Linux汇编与C互相调用
  • 问题-[Delphi]SendMessageTimeout调用后卡住点击任务栏还会出现窗体处理
  • 微信公众平台开发前言
  • selinux故障解决方法及简介
  • Apache的基本使用
  • ES6, React, Redux, Webpack写的一个爬 GitHub 的网页
  • Essential Studio for ASP.NET Web Forms 2017 v2,新增自定义树形网格工具栏
  • iOS小技巧之UIImagePickerController实现头像选择
  • tweak 支持第三方库
  • Vue 2.3、2.4 知识点小结
  • Webpack4 学习笔记 - 01:webpack的安装和简单配置
  • 仿天猫超市收藏抛物线动画工具库
  • 浮现式设计
  • 欢迎参加第二届中国游戏开发者大会
  • 每个JavaScript开发人员应阅读的书【1】 - JavaScript: The Good Parts
  • 深入体验bash on windows,在windows上搭建原生的linux开发环境,酷!
  • 译有关态射的一切
  • - 语言经验 - 《c++的高性能内存管理库tcmalloc和jemalloc》
  • 运行时添加log4j2的appender
  • 《天龙八部3D》Unity技术方案揭秘
  • 策略 : 一文教你成为人工智能(AI)领域专家
  • 积累各种好的链接
  • ​猴子吃桃问题:每天都吃了前一天剩下的一半多一个。
  • # SpringBoot 如何让指定的Bean先加载
  • #includecmath
  • (c语言)strcpy函数用法
  • (附源码)ssm旅游企业财务管理系统 毕业设计 102100
  • (九)c52学习之旅-定时器
  • (算法二)滑动窗口
  • (原創) 物件導向與老子思想 (OO)
  • (转)清华学霸演讲稿:永远不要说你已经尽力了
  • ******之网络***——物理***
  • .mkp勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .NET CF命令行调试器MDbg入门(三) 进程控制
  • .net Stream篇(六)
  • .NET 除了用 Task 之外,如何自己写一个可以 await 的对象?
  • .NET 设计模式初探
  • .net访问oracle数据库性能问题
  • .NET建议使用的大小写命名原则
  • 。。。。。
  • @DataRedisTest测试redis从未如此丝滑
  • @GetMapping和@RequestMapping的区别
  • @Pointcut 使用
  • @RestController注解的使用