抽丝剥茧还是高屋建瓴?软件开发的设计模式(Java语言为例)
大家好,这一期呢,我们说一下设计模式。
设计模式的定义是说在软件设计当中使用一个通用的,可重用的方案来解决一些通用的问题。这个定义跟模板的概念有点儿类似。
这里值得一提的是设计模式并不是说是一个已经成型的设计,你并不能根据它马上进行代码的编写。
但是,另一方面你又可以说设计模式是解决软件设计开发中通常问题的最好实践。
第1个方面,我们说设计模式可以帮我们解决软件开发中的一些问题。
第2个方面,设计方法模式可以帮助你俯瞰你的软件架构设计。
第3个方面,如果你在简历里说你懂设计模式的话,会增加你的面试机会。
那么这里有一个问题就是设计模式对所有的编程语言都有效吗?
通常来说设计模式跟编程语言无关, 但是我们的具体使用又是靠编程语言来体现出来的。
如果把编程语言分为结构化编程语言和面向对象型编程语言的话,设计模式跟面向对象的编程语言可能更接近一些。
下面我们用Java语言为例来说一下设计模式。
适配器Adapter模式,让你通过内部转化来连接两个组件,就是创建一个桥接组件对这两个组件进行转化,就像电源插口的转换器。
修饰Decorator模式允许你在运行的过程中为指定对象添加新的功能,即使这个对象已经创建成功,你也可以添加新的功能在上面。这个主要通过对一个抽象类的多态定义来实现的,就像我们装修或者装饰某个东西的时候,可以不断的添加内容。
正面Facade模式提供简单的接口, 比如像REST就是使用这种模式,避免直接的访问一个个的具体组件。这个就像是一个黑盒子,里面很杂很乱很琐碎,外面调用却很简单。
代理 Proxy模式是为了阻止客户端直接访问对象。通过代理的方式来模拟真实的对象,在代理中可以提供一些有用的机制,比如说缓冲,延迟等等,然后再转发给调用对象。
独生Singleton模式是为了在程序当中建立一个独立的可修改数据空间。实现独生模式的方法有几种,有的方法可以支持延迟加载。如果对象比较轻量级的话就可以直接用私有的静态变量的方式。
静态类方法模式不应该有自己的状态,因为静态类方法是在编译的时候绑定的,所以性能上比较快。静态方法无法被重写。静态类非常难模拟,这样单元测试写起来比较费劲。
轻量级Flyweight模式用来管理一组不可修改的对象实例,如果对象不存在的话就创建。这个创建可以通过工厂的方式。
工厂Factory模式用来创建可修改对象实例,如果失败的话,就返回异常。单元测试中需要模拟工厂来测试你的对象实例。
依赖注入Dependency Injection模式解决了对象之间耦合性的问题,这使得单元测试非常容易。
欢迎关注一起学习讨论,共同进步。
十年内计划写出超过三千六百篇文章,与超过三万名读者互动。
这些文章会在今日头条,知乎,简书,微博,微信公众平台,阿里大鱼号,Medium等各大平台同步上线,敬请期待关注,欢迎洽谈合作相关事宜。
作者简介:
从事软件开发研究二十多年。
先后在如下地区工作:山东,北京,德国斯图加特,新加坡,加拿大温哥华。
个人爱好:
练拳,好好学习,天天向上。
网友评论