![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
设计模式
wujiang88
哈哈
展开
-
里氏替换原则
里氏替换原则更多的说的是子类与父类的关系的一种原则,子类必须实现父类的所有方法,所有能够放子类的地方一定能够放父类。 但是这里的话,我们讲有的时候在我们的业务中,有的子类肯定是有个性化的特征的,比如真枪和玩具枪,真枪能射出子弹,但是玩具枪就不能,那么这个时候,我们或者通过抽象类,通过抽象类是我们可以将这个没有的方法统一在抽象类中实现,然后在我们的子类中就不要去实现了父类的方法了,这样就达到了去除原创 2016-01-20 17:24:03 · 211 阅读 · 0 评论 -
原型模式
原型模式是一种已经封装在Java语言当中的一种拿来就可以使用的模式,它的本质是对类在内存当中的浅克隆,当然这里我们也可以通过直接使用Java的class的流来在内存中复制一份,这种是深拷贝 浅拷贝是指:对象中string和基本类型将会被拷贝,但是非string和非基本类型的类变量和方法变量将不会被拷贝,而只是引用原先被拷贝对象的对象。 深拷贝是指:将这个对象完全的克隆另一份,这个时候这个对象是原创 2016-01-23 11:26:04 · 221 阅读 · 0 评论 -
中介者模式
中介者模式:我们在前面介绍了简单工厂模式,它是两个相关对象的耦合起来的结构,这里,我们要讲的是当有多个相关对象要耦合起来,并且依赖和关联的关系是成网状复杂的情况的时候,这个时候我们按照简单工厂模式来设计的话,是我们在网络架构中的网状结构,关系非常复杂,但是在我们网络的结构中还有一种星形结构,就是在所有耦合对象中间,我们添加一个所有关联对象的中间类来充当各个对象关联的介质,并在这个介质类中完成各个对原创 2016-01-23 11:59:39 · 235 阅读 · 0 评论 -
对命令模式的理解
乍看起来,命令模式有点复杂,但其实细分起来,有点像是对模板模式中父类在一个统一的类中进行了一个封装。 模板方法的使用场景主要是提供了对多态的一个统一访问入口。并且根据入口对象的命令对象,来执行命令。 命令模式容易导致命令子类的膨胀。 我觉得这里比较重要的一个思想就是封装,提供了一个统一处理的入口,而且在这个入口中我们还可以加入其它的一些业务处理,变化的是命令对象,入口可以不变。原创 2016-01-23 16:45:54 · 407 阅读 · 0 评论 -
责任链模式
责任链模式本身表示的是一种链状结构,对象本身持有下一个链的对象,下一个对象又可能持有下一个本类的对象,这样在每个这种类的节点上,我们都可以给与一个符合我们设计的逻辑处理,我们可以在整个链中建立自己的一个处理模型,然后将这个模型封装到整个责任链中,根据模型,我们来对各个节点来处理。 注意:责任链中的每个节点对象都有一个相同的方法,被抽取到了接口中。 比较典型的例子就是:在Servlet容器中的f原创 2016-01-23 21:22:19 · 238 阅读 · 0 评论 -
策略设计模式
策略设计模式是一种对接口与子类这种结构进行的一次上下文封装的模式,避免了多条件的判断,扩展容易,算法可以自由灵活切换。 这里其实最 主要的就是一个封装提供了一个统一的访问入口,并且可以对这个封装的内部改变传入策略对象来改变上下文对象的执行策略(行为)。转载 2016-01-25 10:56:31 · 254 阅读 · 0 评论 -
适配器模式
适配器模式是为了解决两个不同系统中对象结构设计不一样,这个时候我们可以使用适配器模式来解决这种问题,在适配器中,我们把我们需要的结构和目标结构放到一起,然后把目标结构转化成我们需要的结构,这个时候目标结构可能是一个接口,也可能是多个关联的对象。原创 2016-01-25 14:24:49 · 195 阅读 · 0 评论 -
迭代器模式
在迭代者设计模式中,提供了一个统一迭代访问容器中每个元素的方式,这种方式是通过抽取一个统一的接口,但是在不同的容器对象中,我们通过实现对不同容器的对象的访问方式是不一样的,这种设计模式在我们的Java语言的容器框架中已经进行了封装,所以我们在项目开发的时候可以拿过来用。原创 2016-01-25 15:08:02 · 183 阅读 · 0 评论 -
门面设计模式
门面设计模式在我看来和中介者设计模式有几分相似之处,它们都是对系统中现有结构对象或者接口的一个统一使用的封装,不同的地方可能是使用的场景不一样,门面设计模式多用于两个系统或者多个系统需要协同使用的时候,而中介者则是使用在多个模块(这个我也是猜的,仅供参考吧),但是思想都是使用一个类将所有的不同功能的模块对象统一来进行封装。以提供一个统一协调的场所。原创 2016-01-26 10:14:26 · 245 阅读 · 0 评论 -
观察者模式
观察者模式是一种解决一个对象模块可变的观察另一个模块对象的方案,它提供了一个Observable的接口和Observer的观察者扩展接口。原创 2016-01-26 10:27:21 · 220 阅读 · 0 评论 -
对代理模式的理解
代理模式的核心是通过一个类或者接口来获取子类代理对象的方法对象从而实现调用它们,并在调用它们的时候我们可以环绕被调用的方法添加我们需要添加的处理。 静态代理:是指代理的时候我们的代理类和子类必须是同时继承自一个接口,在代理类中,我们可以添加我们的新增逻辑。 动态代理:动态代理也叫面向切面编程,这个是通过动态的生成类来实现对一个类生成一个代理的子类的class来实现动态的添加业务处理代码。原创 2016-01-22 16:59:18 · 326 阅读 · 0 评论 -
对建造者模式的理解
建造者模式:我们有这样的一个场景,我们有多 变的产品,有多变的建造者,这个时候我们完全可以按照工厂方法模式来设计,但是当我们还需要对建造者进行某些建造过程变化的灵活控制的时候,这个时候我们就可以对建造者这个类封装到一个Director的类中,在这个Director类中我们可以对建造者的行为进行一个可变因素的控制。这里其实我们是对对象的不同维度上的扩展,其实这个时候我们完全可以只在建造者和产品的子类原创 2016-01-22 10:59:26 · 745 阅读 · 0 评论 -
依赖倒置原则
依赖倒置原则的本质就是通过抽象(接口或抽象类)使各个类或模块的实现彼此独立, 不互相影响,实现模块间的松耦合,我们怎么在项目中使用这个规则呢?只要遵循以下的几 个规则就可以: ● 每个类尽量都有接口或抽象类,或者抽象类和接口两者都具备 这是依赖倒置的基本要求,接口和抽象类都是属于抽象的,有了抽象才可能依赖倒置。 ● 变量的表面类型尽量是接口或者是抽象类 很多书上说变量的类型一定要是接口转载 2016-01-20 18:05:33 · 383 阅读 · 0 评论 -
对接口隔离原则的理解
接口隔离原则,侧重的是接口的设计应当尽量的小,方法要少,将有相同职责的方法放到一个接口中,保证接口的单纯性,这似乎与职责单一原则很像,但是不是的,职责单一侧重接口与类和方法上的职责单一,但是我们这里的话专指接口,就是指暴露给各个模块的接口,每个模块一个接口,在调用的时候,或者以后修改的时候,我们只要修改这个接口就可以了,非常的方便。也就是说在设计接口的时候,尽量将接口设计的小,方法少,职能单一。原创 2016-01-20 20:44:42 · 447 阅读 · 0 评论 -
迪米特原则(也叫最少知识法则)
迪米特法则是指在类与类协同的时候,我们应该将协同类的公共方法尽量少的暴露给调用类,尽量把最需要的功能方法暴露,无关紧要的就不要了,或者我们可以对这个类的方法做一个总结性的public方法,然后暴露给协同类,这样做的好处是提高了协同类的内聚,这样当我们需要修改协同类的方法的时候不至于将修改的风险扩散到另一个协同类上。这里的尽量减少也就是降低这种风险的扩散。原创 2016-01-20 21:48:54 · 301 阅读 · 0 评论 -
开闭原则
开闭原则讲的是变化与不变的一种折中,这里变化我这里讲的主要是接口,抽象类等父类的方法对子类的公开或者可修改等的变化,当然任何设计都无法做到完美,必须是一种折中。 睡觉了。原创 2016-01-20 23:02:52 · 294 阅读 · 0 评论 -
对单一职责原则的理解
单一职责原则就是说在一个类、接口,甚至是方法功能上的职责上要单一,不能混杂其他的职责,因为当我们混杂了其他的职责,那么这个时候当我们修改代码中的一个职责或者方法的时候就会影响到另一个职责的功能,这个时候给项目维护带来不必要的风险。 当然职责这个东西在不同的项目中定义不同,要根据自己的具体情况来分析。 接口上的职责一定要单一,这个是为了便于后期的维护,一个接口一个实现,这样的话是非常的单一的,我原创 2016-01-20 15:24:44 · 838 阅读 · 0 评论 -
单例设计模式
单例设计模式是指在系统当中我们需要统一进行访问的单一对象,其实这个时候我们可以将我们系统中的这些统一的属性,方法放入到一个单例中,当我们创建的时候系统中就只有一个对象,我们也是通过一个统一的入口来获取这个对象,这个时候管理会很容易,当然统一的方法我们也可以使用static的工具类来实现, 注意的事项:注意的事项主要是在多线程访问入口,并创建对象的时候我们可能会出现两个线程交叉访问的时候,两个线程原创 2016-01-21 11:07:43 · 237 阅读 · 0 评论 -
对工厂方法模式的理解
工厂方法模式,我想这里取名工厂方法模式,它的作用就是对这样一种抽象的架构进行一个基于场景的解释,所以我们在使用设计模式的时候,只要碰到了结构相似的情况,我们就可以套用这种设计模式,甚至是对这种设计模式进行改装,以达到我们的目的。设计模式本来就是变与不变的一种平衡。 我们有这样的一个场景:产品对象,工厂对象,工厂生产产品; 如果产品有多种,我们可以给产品抽象一个类,使得扩展的子类实现一种产品,这原创 2016-01-21 16:33:27 · 709 阅读 · 0 评论 -
对抽象工厂模式的理解
抽象工厂模式是指在父子类间要发生一定的分离变化,当然这里肯定是使用抽象类,抽象类作为父子类的一个旋接扩展类。 它是在一个对象的另一个维度上对对象进行扩展,你比如说人有黑人,白人,黄人;但是人还有男人、女人。 但是在工厂的抽象类中定义的工厂方法尽量写全,你比如说这里的男人,女人,这里在这个维度上就这两种人,当然还有双性人,我们在设计抽象类的时候一定要充分的考量,因为这种设计模式的话在横向上的变化原创 2016-01-21 17:06:24 · 251 阅读 · 0 评论 -
对模板方法的理解
模板方法其实在我们日常开发中一不小心就用上了,他的主要使用是将一个类会变化的方法写成抽象方法供子类来改变,但是这样的话会增加代码的复杂度。 还可以在抽象类中定义一个钩子方法来改变模板方法的行为,这个统一的方法就叫做钩子方法。原创 2016-01-21 21:53:42 · 246 阅读 · 0 评论 -
备忘录模式
备忘录模式主要说的是我们在设计的时候,尽量要满足单一职责原则,有的单纯的记录业务状态的我们尽量的抽取成一个业务Bean对象,通过合理的设计来达到分工明确,职责清晰,分模块管理的目标。原创 2016-01-26 15:52:41 · 271 阅读 · 0 评论