设计模式之Bridge——游戏篇

设计模式:Bridge模式 如果你想要写一个游戏,并且想让这个游戏同时支持PC和手机,那么怎么样的设计可以避免写两套代码,并且不影响可扩展性呢?说起来还是比较简单的,只要把对平台的依赖部分抽取成抽象的接口(比如说绘图部分),并且针对抽取出来的接口,分别实现PC版和手机版就行了。系统的其他部分只要调用那套抽取出来的接口就可以完成所有的功能。这样来看,系统的其他部分是不依赖具体的平台的,也就具有了良好的扩展性。这个就是Bridge模式的应用。 阅读详情

   今天从电子市场买来两张游戏碟,一张是三国游戏(SanGuoGame),一张是CS游戏(CSGame)。玩过游戏的人可能都知道,游戏对计算机系统(ComputerSystem)是有要求的,可能一个游戏在Windows98系统下能玩,到了Windows2000系统下就不能玩了,因此为了不走冤枉路,先看看游戏要求的计算机系统(ComputerSystem)可是一个好习惯呦!

 

好了,闲话少叙开始我们的游戏旅程吧:

1、  在这里,先定义计算机系统(ComputerSystem)接口类:

public interface ComputerSystem {

  public abstract void  playGame(); //玩游戏

}

2、  再定义对计算机系统(ComputerSystem)接口的具体实现类:

A:Windows98系统

public class Windows98 implements ComputerSystem{

  public void  playGame(){

    System.out.println("玩Windows98游戏!");

  }

}

B:Windows2000系统

public class Windows2000 implements ComputerSystem{

  public void  playGame(){

    System.out.println("玩Windows2000游戏!");

  }

}

3、  定义游戏(Game)类:

public abstract class  Game  {

  public abstract void play(); //玩游戏

 

  protected ComputerSystem getSetupSystem(String type) { //获得要安装的系统

    if (type.equals("Windows98")) { //如果游戏要求必须安装在Windows98下

      return new Windows98(); //使用Windows98系统

    }

    else if (type.equals("Windows2000")) { //如果游戏要求必须安装在Windows2000下

      return new Windows2000(); //使用Windows2000系统

    }

    else {

      return new Windows98(); //默认启动的是Windows98系统

    }

  }

}

4、  定义游戏(Game)类的子类:

A:三国游戏(SanGuoGame)

public class SanGuoGame extends Game {

  private ComputerSystem computerSystem;

  public SanGuoGame(String type) {//看游戏要求安装在那个系统上

    computerSystem = getSetupSystem(type);//那么使用这个系统

  }

 

  public void play() {//玩游戏

    computerSystem.playGame();

    System.out.println("我正在玩三国,不要烦我!");

  }

}

B:CS游戏(CSGame)

public class CSGame extends Game {

  private ComputerSystem computerSystem;

  public CSGame(String type) { //看游戏要求安装在那个系统上

    computerSystem = getSetupSystem(type); //那么使用这个系统

  }

 

  public void play() { //玩游戏

    computerSystem.playGame();

    System.out.println("我正在玩CS,不要烦我!");

  }

}

5、编写测试类:

public class Test  {

  public static void main(String[] args) {

    Game sanguo = new SanGuoGame("Windows98"); //游戏要求Windows98

    sanguo.play();

 

    sanguo = new SanGuoGame("Windows2000");//游戏要求Windows2000

    sanguo.play();

 

    Game cs = new CSGame("Windows98"); //游戏要求Windows98

    cs.play();

 

    cs = new CSGame("Windows2000");//游戏要求Windows2000

    cs.play();

  }

}

6、说明:

A:Bridge定义:将抽象和行为划分开来,各自独立,但能动态的结合。

B:从本例中我们可以看到,不同的游戏对系统的要求是不同的,三国和CS可能都需要Windows98系统,也可能需要Windows2000系统,甚至要求不相同的系统,因此处理这类问题,我们就可以用Bridge这种模式了。

      C:这里行为是指游戏,抽象是指系统!  

纽马克-贝塔法(Newmark-Beta Method)在结构动力学中的应用与实现 本文深入解析了纽马克-贝塔法(Newmark-Beta Method)在结构动力学数值计算中的核心原理与应用。作为经典的时间积分算法,它通过调节γ和β参数,在计算精度、稳定性与效率间取得平衡,尤其适用于地震响应、风振分析等工程场景。文章详细阐述了其数学内核、在有限元分析中的实现步骤,并对比了隐式与显式方案的适用场景,为工程师提供了关键的方法选择与参数调优指导。 阅读详情

相关推荐

光电容积脉搏波PPG信号分析笔记

脉搏波信号PPG分析笔记

teresa_zp的专栏 6477

设计模式之Bridge——游戏篇(原创)

设计模式之Bridge——游戏篇   今天从电子市场买来两张游戏碟,一张是三国游戏(SanGuoGame),一张是CS游戏(CSGame)。玩过游戏的人可能都知道,游戏对计算机系统(ComputerSystem)是有要求的,可能一个游戏在Windows98系统下能玩,到了Windows2000系统下就不能玩了,因此为了不走冤枉路,先看看游戏要求的计算机系统(ComputerSystem)可是一

lxgljj的专栏 4083

保姆级教程:用NFS把群晖NAS的文件夹挂到Ubuntu 22.04上,实现文件无缝共享

本文提供了一份详细的教程,指导用户如何通过NFS协议将群晖NAS的文件夹挂载到Ubuntu 22.04系统上,实现文件的无缝共享。文章对比了NFS与SMB协议的性能差异,并提供了群晖端和Ubuntu端的配置指南、高级参数优化、自动挂载方案以及生产环境中的实战技巧,帮助用户提升文件共享效率和系统稳定性。

weixin_29213827的博客 405

设计模式18种

一、设计模式之Flyweight——打球篇    周末没事,和朋友约好去体育馆(Gymnasium)打球,这个体育馆(Gymnasium)提供各种球种,因为我们人多,因此选择了羽毛球(badminton),兵乓球(pingpangball)、排球(vollyball)等球种,我们首先要填写选球清单(playBallList),然后去器材部领球。 下面我们看看该如何实现这个过程呢?

yuhan20081021的专栏 940

大话西游2经典单机版V8:一键架设+GM全功能+仙玉自由修改

本文详细介绍大话西游2经典单机版V8的一键架设教程和GM全功能使用指南,包括仙玉自由修改技巧。该版本无需虚拟机,解压即玩,完美还原官服经典玩法,支持离线运行,是老玩家重温经典和新玩家体验游戏的理想选择。

weixin_27303545的博客 1133

【华为OD机试真题】7、字符串筛选排序 | 机试真题+思路参考+代码解析(C++、Java、Py)

题目描述 >输入一个由N个大小写字母组成的字符串 按照ASCII码值从小到大进行排序 查找字符串中第K个最小ASCII码值的字母(k>=1) 输出该字母所在字符串中的位置索引(字符串的第一个位置索引为0) k如果大于字符串长度则输出最大ASCII码值的字母所在字符串的位置索引 如果有重复字母则输出字母的最小位置索引

KJ.JK 2267

设计模式之bridge(桥)模式

Bridge桥接模式是一种结构型模式,它主要应对的是:由于类型的固有罗辑,使得类型具有两个或两个以上的纬度变化。也就是要求抽象不应依赖于实现细节,实现细节应依赖于抽象。       《设计模式》中说到将抽象部分与实现部分分离,使他们可以独立的变化。       举个例子更清楚些,好像我们平时玩的游戏中有PS版的,但是不是大家都有PS。这时我们等一段时间,一般会出PC版的或其他版本。由于支持

黄刚的专栏 1730

利用 SAP Joule 提升 ABAP 开发效率的前提条件与限制全解析

综上,想要在 ABAP Development Tools 中顺利使用 SAP Joule,既要准备好 BTP、IAS、ABAP 系统与 ADT 的版本与信任链,也要理解许可证、配额、语法范围等限制。只有在这些前提全部满足后,Joule 才能真正发挥生成式 AI 的价值,帮助 ABAP 开发者从繁琐模板中解放出来,把注意力投入在业务创新与 Clean Core 改造之上。未来 SAP 还将扩展中文语境、自动修复建议以及跨系统智能代理等功能,值得持续关注。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 663

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

定义: 将抽象与实现分离,使二者可以独立的变化 桥接模式和传统的依赖于接口,不依赖于实现的模式(即通过继承的方式实现功能)有区别。 通过继承的方式实现功能 当俩个类组群自建,关系呈现出交叉组合的情况,采用继承的方式实现就会产生如下的情况,每个实现都需要新派生出一个子类来进行重写实现。 通过桥接的方式实现功能 通过桥接的方式来实现,则是先把俩个组群的顶层抽象出来,然后在顶层包含引...

学无止境 1688

Lasso的原理及其与其他特征选择方法的比较进行阐述,然后讨论Lasso优点、缺点以及应用场景,最后给出了代码实例

在机器学习领域中,特征选择(feature selection)是指在模型训练前对数据集进行分析,选择其中有助于预测目标变量或影响模型性能的特征,去除不相关或冗余的特征,提升模型的泛化能力。而Lasso回归是一种很流行的用于特征选择的方法之一。Lasso回归(又称LASSO,least absolute shrinkage and selection operator)是一种线性模型中的特征选择方法。

AI天才研究院 3051

AutoSAR系列讲解(实践篇)12.1-Diagnostics简介

主要概括性的讲解了诊断协议UDS和AutoSAR的诊断架构

雪云飞星的博客 1万+

【转】设计模式之Bridge(桥接)

注释:以下资料都是个人从网上收集起来的,会注明来源地址   如果你想要写一个游戏,并且想让这个游戏同时支持PC和手机,那么怎么样的设计可以避免写两套代码,并且不影响可扩展性呢?说起来还是比较简单的,只要把对平台的依赖部分抽取成抽象的接口(比如说绘图部分),并且针对抽取出来的接口,分别实现PC版和手机版就行了。系统的其他部分只要调用那套抽取出来的接口就可以完成所有的功能。这样来看,系统的其他部...

gdfdfg的专栏 176

【异常】Milvus 向量数据库字段缺失错误分析与解决 MilvusVectorStoreServiceV2 - Failed to insert batch [0-1]: The field:

本文分析了Milvus向量数据库插入操作中出现的字段缺失错误。错误显示age_mode字段未提供,导致批量插入失败。根本原因是Milvus Schema要求所有定义字段必须存在,但代码中对部分字段采用条件添加方式。解决方案是将条件添加改为始终添加,为可能为null的字段提供空字符串默认值。文章总结了Schema约束、防御性编程等经验,并建议通过Schema变更检查、单元测试覆盖和数据校验层等预防措施避免类似问题。该问题影响product、mac、source等多个字段,修改后确保了数据插入的可靠性。

奶爸的编程之路,也就一周冷个三天 406

设计模式之Bridge

Bridge模式定义 :将抽象和行为划分开来,各自独立,但能动态的结合。任何事物对象都有抽象和行为之分,例如人,人是一种抽象,人分男人和女人等;人有行为,行为也有各种具体表现,所以,“人”与“人的行为”两个概念也反映了抽象和行为之分。在面向对象设计的基本概念中,对象这个概念实际是由属性和行为两个部分组成的,属性我们可以认为是一种静止的,是一种抽象,一般情况下,行为是包含在一个对象中,但是,

Intraweb的专栏 718

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

深度学习工具包 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")

【设计模式无难事】——Bridge模式

【设计模式无难事】——Bridge模式 一、意图 桥接模式,顾名思义,这里有一个“桥”。。。 为什么需要一个“桥”呢? 我们用它来连接什么呢? 下面先看一个例子 二、例子 需求场景 在游戏中,玩家使用武器砍怪时,战斗的特效的实现 武器:宝剑、铁锤 特效:吸魂、回旋飞 分析&实作 桥接模式实现 1,所有的特效都包括:激活,运用,消失。于是我们定义一个特效接口 Ench

zzy_801011的博客 325

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

设计模式---桥连模式(DesignPattern_Bridge)

DesignPattern_Bridge 摘录自:设计模式与游戏完美开发 十年磨一剑,作者将设计模式理论巧妙地融入到实践中,以一个游戏的完整实现呈现设计模式的应用及经验的传承 《轩辕剑》之父——蔡明宏、资深游戏制作人——李佳泽、Product Evangelist at Unity Technologies——Kelvin Lo、信仁软件设计创办人—— 赖信仁、资深3D游戏...

su9257的博客 130

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

设计模式(结构型——Bridge模式)

设计模式四、Bridge模式4.1 Bridge模式的概念4.2 Bridge模式的实现 四、Bridge模式 4.1 Bridge模式的概念 使用场景 涉及多个维度上的剧烈变化,将各个维度解耦 例如,游戏中的坦克模型,在型号维度上可以有较大变化,在游戏运行平台上也可以有较大变化,PC端、手机端、TV端等 体现设计模式的原则——合成复用 少用继承,多用组合 若用继承的方式,会将不同维度的变化强烈耦合在一起 4.2 Bridge模式的实现 通过聚合的方式,将多个维度的变化组合在一起 pu

qq_37112587的博客 285

Unity 游戏设计模式 — 桥接模式(Bridge)

中介者模式(Mediator)一、使用中介者模式的原因二、桥接模式的定义三、桥接模式的使用说明四、桥接模式的实现范例五、桥接模式的总结 一、使用中介者模式的原因 比如,在实现较为复杂的角色和装备关系时,将两种角色(ISoldier和IEnemy)和三种武器(WeaponGun、WeaponRifle和WeaponRocket)交叉组合时,会存在以下问题: 每当要新增角色类时,都要在新的子类中重复编写相同的程序代码,比如每种武器都要实现对应角色的Fire。 当新增武器类型时,所有角色子类中的Attack方

qq_40120946的博客 3012

图解设计模式 - Bridge 模式

读书笔记 仅供参考Bridge 模式将类的功能层次结构和类的实现层次结构相连接类的层次结构类的功能层次结构 父类具有基本结构 在子类中增加新的功能 类的实现层次结构 父类通过声明抽象方法来定义接口(API) 子类通过实现具体方法来实现接口(API) UML 和角色Abstraction位于“功能层次结构”顶层,角色保存了 Implementor 的实例RefinedAbstraction继承 Abs

wujunyucg的博客 403

设计模式 Bridge 桥接模式

“ 将抽象部分和实现部分分离,使他们都可以独立的变化。”                                                                                        -《设计模式》GoF个人理解:将一个事务进行多方面的抽象分离,利用组合实现绑定关系。需求:游戏 坦克,多种型号、在不同平台上运行。前提,有不同型号的坦克

LiCeRForDream的专栏 1045

Java设计模式全集-桥接模式(Bridge)

桥接模式(Bridge) 将抽象部分与具体实现分开,通过聚合的方式代替继承,防止因为类不断继承产生类爆炸 比如手机有很多品牌,手机还可以安装游戏,游戏又有不同的开发厂商,将游戏进行抽象,聚合到手机类中,可以通过安装游戏的方法,将不同的游戏对象装入手机对象中,获得不同的对象结果 整体上与抽象工厂非常相似,但侧重点不同,抽象工厂侧重于对于一组产品的集中式扩展,而桥接模式是为了防止类的继承爆炸,是为了...

小萤哥的博客 606

「游戏设计模式」 桥接模式 (Bridge)

桥接模式(Bridge) GoF: 将抽象与实现分离, 使二者可以独立的变化; 误定义 多数人以为这是"只依赖接口而不依赖实现"原则的另一个解释: 定义一个接口类, 然后实现的部分在子类中完成; 要点 将实现"不同功能"交给"不同子类完成" 也就是利用"继承的方式"来完成不同功能的实现 类图 注意 可见, 每增加一个子类就要增加不同功能数的孙类, 扩充不方便; 真的定义 要点 解除"继承实现"的限制; 类图 代码 public abstract class RenderEngine{...} publi

wg_cheeky的博客 223
上一篇: 设计模式之Chain of Responsibility——项目篇
下一篇: 设计模式之Flyweight——打球篇
cyokin
博客等级 码龄24年 0粉丝 8原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值