常用设计模式之应用场景/好处在哪儿

来源:互联网 发布:货到付款订单系统源码 编辑:程序博客网 时间:2024/05/14 22:10

昨天去面试 被问及了java的设计模式  问我工厂模式的好处在哪儿 我答的是便于管理易改变的类 貌似不怎么对 晚上回来特别再一次看了常用设计模式的应用场景

实话说设计模式这种东西 很多时候感觉可以用 就用了 为什么用 用了有什么好处 都不会去深究 平时做设计的时候就是凭一个直觉  可是面试不会这样 还得有个书面化的表达

常用设计模式应用场景如下:


1、抽象工厂   
应用场景:封装变化点。创建一系列相互依赖的对象。 
在软件系统中,经常面临着“一系列相互依赖的对象”的创建工作;同时由于需求的变化,往往存在更多系列对象的创建工作。如何应对这各变化如何绕过常规的对象创建方法(new),提供一种“封装机制”来避免客户程序和这种“多系列具体对象创建工作”的紧耦合。 

比如游戏里一系列相关联的对象:丛林 房屋 怪物 道路


2、Builder   
在软件系统中,有时候面临着“一个复杂对象”的创建工作,其通常由各个部分的子对象用一定的算法构成;由于需求的变化,这个复杂对象的各个部分经常面临着剧烈的变化,但是将它们组合在一起的算法却相对稳定。 
Builder设计模式是应对这样的需求变化:如何提供一种“封装机制”来隔离“复杂对象的各个部分”的变化,从而保持系统中的“稳定构建算法”,不随着需求改变而改变。 



3、工厂方法(把变和不变的地方隔离出来)   
紧耦合和松耦合:如何进行模块划分? 
主模块(抽象部分)-->次模块(细节具体部分) 对模块进行分析(高层模块-->低层模块) 
在软件系统中,经常面临着“某个对象”的创建工作;由于需求的变化,这个对象的具体实现经常面临着剧烈的变化,但是它却拥有比较稳定的接口。 
如何应对这种变化?如何提供一种“封装机制”来隔离出“这种易变对象”的变化,从而保持系统中 
“其他依赖该对象的对象(主逻辑)”不随着需求改变而改变? 
解决:定义一个用于创建对象的接口,让子类决定实例化哪一个类。Factory Method使得一个类的实例化延迟。 


4、Bridge模式 

适用场景:将抽象部分与实现部分分离,使他们都可以独立地变化将 

或将一个事物的多个维度的变化分离,该模式证明聚合比继承好 

将导致类改变的两个维度的变化的实现分离开来.



5、适配器Adapter   回页首 

在软件系统中,由于应用 环境的变化,常常要将"一些现在的对象"放到新的环境中应用,但是新环境要求的接口是这些现存对象所不满足的 

适用场景:在不改变原来实现的基础上,将原来不兼容的接口转换为兼容的接口。将一个类的接口转换至客户希望的另一个接口。Adapter 

           模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。 



6、Decarator   回页首 

过度地使用了继承来扩展对象的功能,由于继承为类型引入的静态特质,使得这种扩展方式缺乏灵活性 

并且随着子类的增多,各子类的组合会导致更多子类的膨胀.动态地给一个对象增加一些额外的职责 



详细说明:http://long254229962.iteye.com/admin/blogs/1596617

原创粉丝点击