在日常与各种代码打交道的时候,我常常在思考怎么样写代码会更好,也时常会尝试对代码进行重构,在重构的时候更多的思考是否要考虑某种设计模式。是的,你没看错,在做这件事的时候往往会先入为主的要引入某种设计模式,那么这种想法好不好呢?
一、什么是设计模式
我们常常都会去学习设计模式,在代码中尝试引入设计模式以使得我们的代码更优雅,更易扩展,更易维护。我们常常在看一些好的源码的时候会偶然间感觉他使用了某种模式,但却又总感觉不是那样。这就引出了对设计模式的思考,到底什么是设计模式,有没有完美的设计模式。这也许就是陷入了一个技术怪圈,其实说到底如果单拿出代码基本都能看懂到底要做什么,但为什么这样写,好处是什么,这往往才是所犯迷糊的地方。
所谓的设计模式归结一点就是一种代码的写法。是的,所有的设计模式都是为了达到某种目的的一种代码写法,而这种写法其本身没有优劣或完美之说,如果非要说其优劣那么也一定是需要依托于具体的业务场景,否则就有点耍流氓的感觉了。就好比我们在评价一个物件的时候,在甲的角度是好的,但可能对乙而言却是坏的,因为大家的出发点不一样,也就是大家面对的场景不一样。
那么面对设计模式而言,也有其优缺点,这时候需要结合业务场景去看,不要滥用设计模式或者将设计模式绝对化。而对于设计模式中的缺点,也是需要结合实际的业务场景去考虑,将思路放开,其中的缺点可以通过修改、修补的方式去补充完善的。
二、学习设计模式的目的
1、常规设计模式的用法,这个是基础,补充我们的见识,基础的23种设计模式是为了让我们知道常规的写法有哪些,在不同的场景下该怎么用
2、对设计模式优缺点的评估,需要结合具体的场景去看待,这时候可以在具体的地方进行修正
3、设计模式可以进行变种,设计模式的套路不是绝对的,可以在一定程度上根据自己的场景及主观进行一定的修正
三、设计模式的分类
1、创建型
创建型设计模式是为了解决创建对象的问题,其主体是为了对象的创建,为解决创建对象的性能开销、灵活性而提供的代码写法的方案。
包含单例模式、抽象工厂模式、建造者模式、工厂模式、原型模式
2、行为型
行为型设计模式是为了解决具体的业务处理问题,为了达到具体的业务目的的代码写法。
包含模板方法模式、命令模式、迭代器模式、观察者模式、中介者模式、备忘录模式、解释器模式、状态模式、策略模式、责任链模式、访问者模式
3、结构型
结构型模式是为了解决代码的结构问题,通过对结构的设计达到性能、可扩展性、业务目的的代码写法。
包含适配器模式、桥接模式、装饰器模式、组合模式、外观模式、享元模式、代理模式
不管是哪种模式,我们在设计的时候都需要依赖具体的场景,然后根据成本、后续的情况做具体的分析然后在决定是否引入合适的设计模式。总之,抛开场景谈设计或引入设计模式都是在耍流氓。