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

news/2024/7/7 12:54:38
版权声明:本文为博主原创文章。未经博主同意不得转载。 https://blog.csdn.net/u010929604/article/details/26051679

         在面向对象的世界里,设计模式从来就没有最好最强的,各个模式从来就谁也不服谁。彼此明争暗斗,未曾善罢甘休。

今天。连同简单工厂模式在内的24个设计模式齐聚中原,霎时间。乌云密布。杀气冲天,面向对象的世界里要迎来一场浩劫,血雨腥风,在所难免

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

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

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

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

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

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

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

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

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

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

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

         建造者模式也用了独门武功:我们将一个复杂对象的构建与它的表示分离,如此便可轻松地改变一个产品的内部表示,而且使得构造代码和表示代码分开。

这样对客户来讲,无需关心产品的创建过程。而仅仅要告诉我们须要什么就能够用相同的构建过程创建不同的产品出来。

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

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

溯其本源,在我工厂!

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

转载于:https://www.cnblogs.com/ldxsuanfa/p/10702774.html


http://www.niftyadmin.cn/n/4556143.html

相关文章

Linux虚拟系统安装——Ubuntu18.04 CentOS6.5

Linux虚拟系统安装——Ubuntu18.04 & CentOS6.5 摘要:Linux简介、虚拟系统安装、系统备份与文件介绍 1. Linux简介 (1)1968年,MIT、Bell实验室、美国通用电气公司共同开发Multic项目; (2)19…

贪吃蛇(C语言)

Snake.c #include<stdio.h> #include<stdlib.h> #include <time.h> #include <windows.h> #include <conio.h>

VUE 动态修改Video标签Src播放路径

首先HTML&#xff0c;注意这里修改 bind绑定src 属性是不能生效的 我使用的是用JS 获取DOM节点&#xff0c;然后给DOM的Src属性赋值 <video id"playVideos" controls width"100%" height"240"><source id"playVideosss" :src…

六.类的封装

类的封装 源程序&#xff1a; package lianxi;public class Account {String zhanghao;double cunkuanyu_e;Account (String hao,double a){zhanghaohao;cunkuanyu_ea; }//存款之后 并得到余额 //有返回值带参数的方法double cunkuan(Double cunqian) { if(cunqian<0)…

独立看第一个C++程序到最终结果log----2019-04-15

本文纯为本人记录&#xff0c;有网上诸多参考&#xff0c;请勿转发&#xff01; 记录可能可能有点啰嗦&#xff0c;自己划重点吧&#xff01;&#xff01; &#xff08;无论是生活还是工作&#xff0c;如果很困惑&#xff0c;千万不要消极一定要勇敢积极的面对它&#xff0c;不…

C++数组与类

}cin cin.get() cingetline() 其中cin是istream类的对象&#xff0c;cin 不能获取space 当按enter时 space以后的内容不会被输入,不释放enter&#xff1b;cin.get()函数&#xff0c;能接受space&#xff08;空间足够时候&#xff09;&#xff0c;不释放enter.cin.getline()函数…

C++结构 和指针

定义新的结构后会有新的结构成员&#xff0c; 然后再创建给结构变量&#xff08;struct可以省缺&#xff09;&#xff0c; 其中结构变量可以是基本类型也可是指针&#xff0c; 数组等。。#include<iostream>#include<string>using namespace std;struct infltable/…

VS 2010 快捷键

1. 强迫智能感知&#xff1a;CtrlJ&#xff1b; 2.强迫智能感知显示参数信息&#xff1a;Ctrl-Shift-空格&#xff1b; 3.格式化整个块&#xff1a;CtrlKF 4. 检查括号匹配(在左右括号间切换): Ctrl ] 5. 选中从光标起到行首(尾)间的代码: Shift Home(End) 6. 在方法定义…