本文共 2799 字,大约阅读时间需要 9 分钟。
时间有限就只讲几个经常用到的设计模式。资料上讲的太含糊,太抽象,我尽量用白话,多举例!(擎天哥在这里只讲概念,帮助理解,具体怎么写代码大家在下面练练)
1, 工厂模式
2, 单列模式
3, 观察者模式
4, 外观模式
5, 命令模式
6, 适配器模式
7, 中介者模式
8, 原型模式
设计模式是前人为我们留下来的宝贵财富,设计模式是一套经过众多开发者认可的,为我们在开发项目的过程中解决类似问题提供的开发模式,方法,经验。
百度百科上说设计模式是软件工程的基石,这是错误的,对象才是软件工程的基石。它不是组成软件的元素,而是组织对象的一套方法。
它只是方法,经验,编程思想,解决特定问题的模版,就像卡车怎么样才能装更多的砖头?把砖头放平,放直,摆整齐,这样才能装的更多。
废话不多说,come on baby!
一工厂模式
使用工厂模式最简单的目的就是使创建对象的和类里面的具体代码解耦。这样更容易扩展,维护。
举个小列子比如我在一百个类里面都创建了一个对象A。但是后来我又发现用A并不适合,对象B更适合。所以你就要改一百个类里面的代码。这样是不是很麻烦!
但如果你搞一个工厂模式留一个接口来创建,这样一百个类里面只需要掉用这个接口就行。当你需要改变时,只需要改变接口里面的内容就行了。这样是不是很牛逼,省了不少功夫吧。
其实工厂模式是面向对象编程原则隔离,封装的延伸。
二 单列模式
使用单列模式可以保证数据数据来源唯一,数据共享。
单列模式在整个项目中只有一个改类的实例。可全局共享其数据。
这个就不举列子了,大家都知道滴。
三 观察者模式
它定义了一对多的依赖关系,多个对象依赖他的变化而变化,当它变化时依赖它的对象也跟着刷新。
这个模式很重要。在项目中运用的非常广泛。
在通信模块,在ui模块中,命令系统中都有用到。
这个模块必须有观察者和被观察者对象。
一般情况下,观察者需要在被观察者这里注册,以便能得到通知。
就像注册账号,你在一个网站注册一个账号,然后当网站有更新的时候会通知你。
比如下面的代码:
这是一个命令管理器既代表被观察者,我把对象封装成一个对象,然后在命令管理器这里注册。第一个参数代表命令类型既代表观察者,第二个参数代表具体的内容表示要改变的信息。
当我做一个命令操作的时候我通知这个命令,命令内容改变了,让命令更新。
也可用于ui模块中。Model是被观察者,control是观察者。当model有数据改变了通知control去刷新view的显示。
在用观察者模式的时候请注意通知千万不要直接调用要用事件的形式。因为直接调用违背了接口隔离原则。
四 外观模式
它为几个子模块的接口提供了一个更高层的统一的接口管理。
我称外观模式为老板模式,柜台模式
因为你有了它,你所有的跟这些模块有关的操作都可以通过一个类提供的接口来进行,是不是很方便!
就像一台汽车有驾驶系统,有声视播放系统,有开窗系统,有雨刷系统等。你要怎么去控制?汽车设计者把这些操作的按钮都放到一个功能区里面,你只要通过这个功能区就能控制整个汽车。
也比如在银行里面你需要办很多业务,网银,存钱,办卡什么的。那么银行的业务人员就是外观模式,你只需要排号然后到你的时候,你告诉他所有你想办的业务,他就会为你办好了。呵呵,是不是很爽,很方便。
具体到游戏项目当中比如在地图人物系统中。如图:
我有两个方法addPerson()和removePerson()。增加玩家和移除玩家
我有了这两个接口,我是不是想增加或移除人物的时候不用直接去操作person类了。
直接通过MapPersonManager.as这个类调用接口就成了呢。很方便吧。
降低了类直接的耦合度,使项目更容易维护,扩展,更清晰。
五命令模式
命令模式把请求封装成对象,这样的话可以使你的操作参数化,也可以扩展为撤销,回复命令的功能。
玩过flash和ps的都知道ctrl + z 和 ctrl + y 这两个功能用起来太爽了。哥想反悔就反悔,哥想撤销就撤销,想回复就回复,太你妹舒服了。
为什么能这么爽呢,因为人家使用了命令模式。
废话不说看图说话。
Command是对命令的封装类,commandID是命令id,commandContent是命令内容
这个接口是对命令的解析,就是接到命令后如何把他转化为可用的信息。
这个类是注册命令,第一个参数是命令ID,第二个参数是,命令内容,第三个参数是命令解析类。其实这个类用的是观察者模式。
CommandManager这个类是整个命令模块的管理类(外观模式)
这个模块的执行过程是这样的如图。
命令先要注册,然后每次执行注册过的命令都会被记忆放到一个命令列表中,当你需要回复的时候就拿出最后执行的命令放到一个回复命令列表中。然后根据这个命令的ID来得到这个命令上次是什么具体内容,然后再重新执行上次的命令内容。当需要回复的时候也是同理的。
可能讲的有点朦胧,想知道具体细节的话请加我(擎天哥qq 296963166).
六适配器模式
这个比较简单但经常用。简单介绍一下。
适配器模式就是把你不合适用的类在外面加个壳包装成你可要用的的。
比如说我有一个数据类是infoA.as,功能类functionB.as.但functionB要用到的是infoB.as实现了faceB 这个接口,但我现在得到数据是infoA格式的。肿么办?那我搞一个InfoC。实现faceB这个接口,然后里面有一个得到infoA数据的方法。这样我就把infoC传给functionB。这不就解决问题了吗!皆大欢喜,ohye~
也可要专门搞一个类,专门搞对象转换。
七
看其名字就知道干什么的了。丫的功能类似于房产中介,前程无忧。
中介者模式是为多个对象共同服务,使多个对象能够通过他们能相互联系,有机结合起来,降低了对象之间的耦合度,使对对象之间的操作全部掌握在自己中介者手上。
比如在聊天系统中。
聊天室就是中介者,聊天者是中介服务对象。聊天者所有的信息都集中到聊天室这里,然后聊天室根据目标对象去分发聊天的内容到指定对象。
八原型模式
原型模式是一种创建型设计模式,Prototype模式允许一个对象再创建另外一个可定制的对象,根本无需知道任何如何创建的细节,工作原理是:通过将一个原型对象传给那个要发动创建的对象,这个要发动创建的对象通过请求原型对象拷贝它们自己来实施创建。Prototype原型模式是一种创建型设计模式,Prototype模式允许一个对象再创建另外一个可定制的对象,根本无需知道任何如何创建的细节,工作原理是:通过将一个原型对象传给那个要发动创建的对象,这个要发动创建的对象通过请求原型对象拷贝它们自己来实施创建。v
最简单的应用就是Event类里面的clone()方法。
今天就先写到这里吧。
转载地址:http://aejsi.baihongyu.com/