游戏设计模式学习笔记(1)设计原则、看懂类图

UML类图在游戏中应用 笔者介绍:姜雪伟,IT公司技术合伙人,IT高级讲师,优快云社区专家,特邀编辑,畅销书作者,国家专利发明人;已出版书籍:《手把手教你架构3D游戏引擎》电子工业出版社和《Unity3D实战核心技术详解》电子工业出版社等。优快云视频网址:http://edu.youkuaiyun.com/lecturer/144 前面介绍过各种架构设计,也编写过使用架构设计开发游戏,但是没有细说用什么工具去做架构设计,在这里我 阅读详情

游戏设计模式学习笔记(1)设计原则、看懂类图

参考:

《设计模式与游戏完美开发》

《游戏编程模式》(https://github.com/tkchu/Game-Programming-Patterns-CN)

《图说设计模式( Graphic Design Patterns)》(https://github.com/me115/design_patterns)

【游戏设计模式】浅墨_毛星云: https://blog.youkuaiyun.com/poem_qianmo/article/details/52505170
设计模式简介: https://www.runoob.com/design-pattern/design-pattern-intro.html


  • GoF:Gang of Four,《设计模式》一书的四位作者

设计模式是什么

  • 解决一再出现的问题:归纳出相同的解决方案。
  • 解决问题的方案和问题的核心的关键点。
  • 可重复使用的解决方案。

设计原则

单一职责原则(SRP:Single Responsibility Principle)

  • 当设计封装一个类时,该类应该只负责一件事。

开闭原则(OCP: Open-Closed Principle)

  • 对扩展开放、对修改关闭。
  • 对于已经完成测试上线运行的功能,
    • 应该不能再修改这个累的任何接口和实现内容。
    • 新增需求就要朝向“功能接口化”设计,将功能操作抽象为接口,功能实现下移到子类。

里氏替换原则(LSP: Liskov Substitution Principle)

  • 子类必须能够替换父类。
  • 客户端使用时,应该不知道目前对象是哪一个子类实现的。由类本身对象产生机制决定。

依赖倒置原则(DIP: Dependence Inversion Principle)

  • 高层模块不依赖于低层模块,两者都应该依赖于抽象概念
  • 抽象接口不应该依赖于实现,实现应该依赖于抽象接口
  • 例如USB接口规范。

接口隔离原则(ISP: Interface Segregation Principle)

  • 客户端不应该被迫使用它们用不到的接口方法。
  • 通过“功能的切分”和“接口的简化”可以减少这类问题的发生。

最少知识原则(LKP: Least Knowledge Principle)

  • 类应该越少使用到其他类提供的功能越好。

少用继承多用组合原则


GoF设计模式分为3大类

  • 创建模式(Creational):产生对象的过程及方式。
  • 结构模式(Structural):类或对象之间组合的方式。
  • 行为模式(Behavioral):类或对象之间互动或责任分配的方式。

看懂类图

看懂UML类图和时序图:https://design-patterns.readthedocs.io/zh_CN/latest/read_uml.html

3D游戏编程作业7 智能巡逻兵作业目标游戏规则游戏设计1、UML类图2、游戏预制3、游戏动画机制作4、相关代码4.1 巡逻兵工厂4.2 场景控制器4.3 事件管理器4.4 游戏界面4.5 碰撞通知4.6 相机跟随5、C#文件的挂载游戏运行效果展示游戏中遇到的问题仓库地址 作业目标 智能巡逻兵: 提交要求: 游戏设计要求: 创建一个地图和若干巡逻兵(使用动画); 每个巡逻兵走一个3~5个边的凸多边型,位置数据是相对地址。即每次确定下一个目标位置,用自己当前位置为原点计算; 巡逻兵碰撞到障碍物,则会自动选下一个点为目标; 巡逻 阅读详情

相关推荐

设计模式与游戏完美开发

设计模式与游戏完美开发 设计模式与游戏完美开发 设计模式与游戏完美开发 设计模式与游戏完美开发 设计模式与游戏完美开发 设计模式与游戏完美开发 设计模式与游戏完美开发 设计模式与游戏完美开发 设计模式与游戏完美开发 设计模式与游戏完美开发

《方块跑酷》UML类图与功能性总结

一、类图总览二、功能模块设计。

lee2813的博客 719

blackjack 21点游戏设计类图(面向对象)

这是关于blackjack即21点游戏的设计类图,运用了面向对象分析和设计的方法,是面向对象初学者很好的参考。

Profiler 采集层原理深度剖析:从字节码到火焰图的完整旅程

JVM 中很多操作(GC、栈采样、偏向锁撤销等)需要线程停在一个"状态一致"的位置,这个位置就是安全点。JVM 只在特定位置插入安全点检查(如方法返回、循环回边)。早期的 Profiler(如基于JVMTI的)获取线程栈时,必须等线程运行到安全点才能采样。维度核心权衡大厂选择采集方法精度 vs 开销采样法(生产环境)采样时机便利 vs 准确绕开安全点(AsyncGetCallTrace)数据结构简单 vs 安全无锁环形缓冲区采样率单机开销 vs 全局精度超低采样率 + 大规模聚合采集位置。

本博客聚焦游戏开发技巧、创业实战心得及大学热门课程干货。这里既有技术深度,也有思维广度,无论你是开发者、创业者还是高校学子,都能在这里找到适合自己的成长之路! 2323

一个手机游戏引擎的UML 类图

这是我在开发手机游戏引擎时设计的一个类图,里面包含东西还算全面

《设计模式与游戏完美开发》java demo.zip

java课程设计大作业,java、算法练手项目,适合初学java、数据结构的同学拿来学习研究,基于java、GUI开发的小游戏,程序都经过测试,可以直接运行,资源含程序运行所需的源码、资源文件等全部数据,有需要的可放心下载使用。 java课程设计大作业,java、算法练手项目,适合初学java、数据结构的同学拿来学习研究,基于java、GUI开发的小游戏,程序都经过测试,可以直接运行,资源含程序运行所需的源码、资源文件等全部数据,有需要的可放心下载使用。 java课程设计大作业,java、算法练手项目,适合初学java、数据结构的同学拿来学习研究,基于java、GUI开发的小游戏,程序都经过测试,可以直接运行,资源含程序运行所需的源码、资源文件等全部数据,有需要的可放心下载使用。

飞机大战游戏设计

皮卡丘大战超梦(飞机大战) java实验课大作业让设计一个游戏,就试着写了一下,下面有我的源码,欢迎小伙伴们一起学习。 运行效果图 游戏界面 游戏结束时候的画面 一个简单的UML类图 游戏实现 MyGameFrame类:JFrame游戏支架,绘制窗口,main Utils类:工具类,运用IO流方便图片的调用 GameObject类:游戏里物体的父类 Plane类:英雄机的类 Enemy类:敌机的类 BUllet类:敌机发出的子弹类 Diamond类:英雄机拾取的宝石类 实验总结 窗口的建立

qq_45918616的博客 1742

23种设计模式(C++).pdf

设计模式精解-GoF 23 种设计模式解析附 C++实现源码

游戏设计中常见的设计模式——设计原则

设计模式其实时基于在开发中经常出现的问题所提出的解决方案的核心,之后可以让你基于某中设计模式变出各种具体的招式,来应对各种问题。软件开发就是使用某一种程序设计语言,来完成软件系统中需要具备的功能,这些功能就可以被设计者成为“问题”。常见的“问题”分为两种:一种是特定的问题,就是该问题只会出现在某一个软件系统中;另一种是泛问题,就是诸如此类的问题会以相同的形式出现在不同软件系统中。而设计模式就是针对这些泛问题所设计的解决方案。

2401_86085828的博客 4321

TDSQL-单机安装

根据腾讯云官方要求,TDSQL安装至少需要三台机器。本人想要学习TDSQL但是没有足够的机器资源,经过仔细分析研究TDSQL安装过程,尝试发现单台机器也可以成功安装TDSQL,现将本人单台机器安装TDSQL的过程以及安装过程中遇到的问题在此分享。具体安装过程可参考腾讯官方文档,本文仅分享与官方文档不一致的步骤。

u012607648的博客 6805

用Python和CasADi实现高斯伪谱法:一个轨迹优化问题的保姆级教程

本文详细介绍了如何使用Python和CasADi框架实现高斯伪谱法解决轨迹优化问题。通过保姆级教程,从环境准备、问题建模到高斯伪谱法的核心实现,包括配点与权重计算、微分矩阵构造和动力学约束实现,最终完成问题求解与结果可视化。适用于机器人轨迹规划和无人机路径优化等工程场景。

weixin_30776273的博客 293

设计模式学习笔记(一)——六大设计原则

六大设计原则(SOLID原则+迪米特法则)是面向对象编程的重要指导准则。单一职责原则要求类功能单一;开闭原则强调扩展而非修改;里氏替换原则确保继承合理性;接口隔离原则拆分臃肿接口;依赖倒置原则将依赖转向抽象;迪米特法则限制对象耦合范围。这些原则虽不强制,但能显著提升代码质量,降低维护成本。初学者可能觉得束缚,但长期实践能培养良好的架构思维。合理运用这些原则,可构建出更健壮、可扩展的软件系统。

WDaMu的博客 1162

2022(一等奖)B360基于Arcpy与SVM的滑坡易发性评价

此外,在ArcGIS平台下,“易发性图预测(多进程)”工具的运行时间为2h 48m 3s,“易发性图预测(单进程)”工具的运行时间为5h 19m 27s,运行时间缩短了近2h 31m 24s,运行效率提高了47.39%。在ArcGIS Pro平台下,“易发性图预测(多进程)”工具的运行时间为20m 12s,“易发性图预测(单进程)”工具的运行时间为1h 26m 47s,将运行时间缩短了近1h 6m 35s,运行效率提高了76.72%。滑坡的发生受各种影响因素的影响,目前,影响因素的选择没有一个统一的标准。

2301_77310370的博客 1465

设计模式视频教程——【从设计到模式】

你了解常用的设计模式吗?你了解系统设计的原则吗?你学习设计模式是不是学一次忘一次?其实,23种设计模式不是松散的,是有关系的,是需要学习方法的。跟我重新认识设计——从设计到模式。

王福朋 6988

【26美赛D题】2026美赛数学建模(MCM/ICM)思路解析及代码分享

2026美赛D题数学建模竞赛思路解析摘要:本文针对美赛D题提供系统性解决方案,提出四层建模框架(数据层、机理层、模型层、决策层),强调逻辑闭环比模型复杂度更重要。包含通用建模步骤:指标体系构建、状态评估、动态预测和策略优化,并给出Python基础代码框架。论文建议采用七段式结构,突出从现实问题到决策方案的完整闭环。核心在于通过数据驱动方法揭示问题规律,结合多源数据整合、系统行为建模和风险评估,最终形成可落地的决策建议,体现数学建模解决实际问题的能力。

一键难忘的博客 1081

Claude Code 100个真实案例 - 用AI批量清洗Excel脏数据(10万行3分钟搞定)

本案例展示如何使用 Claude Code 搭建一个强大的 Excel 数据清洗工具。支持自动检测和处理空值、重复行、格式错误、异常值等常见脏数据问题,批量处理10万行数据只需3分钟。

yueyeguzhuo的专栏 37

【Java】《Head First设计模式》读书笔记01: 《Head First设计模式》到底讲了什么?新手怎么学才不会从入门到放弃

Head First设计模式》绝对不是一本让你“读完就忘”的教科书,它是一本训练营手册。它逼迫你不断思考软件变化之源,并通过手把手的故事和代码,把设计原则烙进你的思维里。从策略模式起,你就开始学会“把变化的地方揪出来关进笼子里”。后续每一个模式,都是在不同场景下对这个核心思想的进一步演绎。好好跟着书中的节奏走,别跳步,你会发现:六个月后,当你回看自己过去写的“一锅粥”代码时,会不由自主地皱起眉头,并脑海中自动浮现出一个合适的模式来重构它。那个时刻,你就真正入门了。

1160

Darknet-Yolov3 移植过程

本教程面向使用寒武纪平台进行深度学习推理任务的开发者。针对当前主流检测网络darknet-yolov3,进行寒武纪平台的移植。开发者对照移植过程,能够利用寒武纪智能处理器设备完成多种场景的目标检测任务。本实验代码基于 Neuware 1.6.1 与 Python 2.7 环境。

shengyin714959的博客 438

C#设计模式 学习笔记

《C#设计模式》学习笔记

qq_44809934的博客 1703

彻底解决JDK安装包点击后无反应

jdk双击无法安装,jdk双击没反应,jdk安装包双击后没反应。

renkai721的专栏 8937

uniapp - 实现移动端H5微信公众号网页内置浏览器中预览和下载word文档(doc)、excel表格(xls)、ppt文稿、pdf文档等文件,微信内部打开预览和下载到本地详教程,兼容安卓苹果手机

uni-app,微信公众号,h5,移动端,web平台端,网页,网站,Uniapp微信公众号H5网站,内置浏览器下载文档,如何在微信浏览器中预览office文件,word文档,excel文档,pdf文档,ppt文档,office,微信内置浏览器下载文件,下载文件,在微信浏览器里面实现下载任意文件,H5需要在微信浏览器中下载excel文件,UniApp实现网页在微信内置浏览器中下载文件详细教程,安卓点击下载会提示打开浏览器,后端返回流文件,如何解决无法下载文件,跳转至浏览器下载文件,发送到电脑微信,安卓,苹果,

🏆 前端领域优质创作者 1万+

设计模式一之策略模式学习笔记

设计模式一 之 策略模式 学习笔记需求开始设计设计1最终设计 阅读《Head First设计模式》来学习设计模式,以下代码都是书中的例子,通过不断的优化代码来达到学习的目的。《Head First设计模式》中的完整的代码的例子都可以在https://www.wickedlysmart.com/head-first-design-patterns/下载到。 看书是学习的一种方式,写博客是巩固学...

wangchenghao的博客 311

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

《head first设计模式》读书笔记(一)

文章目录前言第一章 设计模式入门模拟鸭子游戏创建变化-增加飞行功能运用模式设计原则策略模式总结第二章 观察者模式观察者模式设计原则自实现Java内置实现总结第三章 装饰者模式饮料问题设计原则装饰者模式总结 前言 本系列是《head first设计模式》设计模式的读书笔记,一包含一到三章,此书是不错的有关设计模式的入门书(代码是用java写的),推荐大家读一读。 第一章 设计模式入门 模拟鸭子游戏 创建 通过定义抽象的Duck,封装了统一的行为,并提供了显示颜色的接口。 public abstract cla

yuexiaqiying的博客 402

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

设计模式学习笔记(一)——面向对象设计模式与原则

设计模式学习笔记(一)——面向对象设计模式与原则  今天听了《C#面向对象设计模式纵横谈(1):面向对象设计模式与原则》课程。总结了一些笔记。 首先介绍了什么是设计模式:设计模式描述了软件设计过程中某一类常见问题的一般性的解决方案。 下面主要讨论面向对象设计模式。 面向对象设计模式描述了类与相互通信的对象之间的组织关系。目的是应对变化、提高复用、减少改变。 那到底什么是对象:  1、从概念层面

zhy05的专栏 597

23种设计模式学习笔记(6)

21,观察者模式 21.1 观察者模式的定义和特点 观察者(Observer)模式的定义:**指多个对象间存在一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。**这种模式有时又称作发布-订阅模式、模型-视图模式,它是对象行为型模式。 观察者模式是一种对象行为型模式,其主要优点如下。 降低了目标与观察者之间的耦合关系,两者之间是抽象耦合关系。符合依赖倒置原则。 目标与观察者之间建立了一套触发机制。 它的主要缺点如下。 目标与观察者之间的依赖关系并没有完全解除,而且

康小庄的博客 232

14-C#.Net-设计模式-学习笔记

核心思想:一个工厂不只生产一种产品,而是生产一族相关产品(种族 + 军队 + 资源)。调用方优点:扩展新种族(产品族)很方便,加一个工厂类即可。缺点:扩展新产品类型(比如加个 IHero)需要改所有工厂类,这叫"倾斜性可扩展"——对产品族扩展友好,对产品类型扩展不友好。

噢~ 624
上一篇: Lua 源码学习笔记(4)GC
下一篇: 游戏设计模式学习笔记(2)命令模式
ChiLi_Lin
博客等级 码龄12年 760粉丝 184原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值