摘要:
一、模式名 装饰者模式, Decorator 二、解决的问题 装饰者模式顾名思义,就是在原来的对象上加入一些修饰的部分,用以丰富原有对象的功能。但装饰器模式中的装饰器类和被装饰的对象保持一致,一般是继承或实现同一个父类或接口。 三、解决方案 装饰者模式的UML图如下所示。 示例代码如下 public class DecoratorExer { public static void main... 阅读全文
摘要:
一、模式名 适配器, Adapter 二、解决的问题 适配器模式就像我们平常使用的手机充电器转接头,把通用接口转换为非通用的Type-C接口,这样使用Type-C接口充电的手机就能使用平常的充电器充电。 适配器模式也是如此,通过定义一个适配器类,将两个无法统一、无法适配的类整合,使得它们能在一起工作。一般适配器模式用于一个类想使用另外一个类的某些方法,但这两个类无法兼容,不是继承于同一个类或实现了... 阅读全文
摘要:
一、模式名 抽象工厂, Abstract Factory 二、解决的问题 抽象工厂由“抽象”和"工厂"两个词组成,前者代表了使用了抽象类,后者代表了实现了工厂组装零件的模式。都知道,工厂完成零部件的生产后,再组装成对应的产品,抽象工厂正是实现了这个过程。 抽象工厂用于存在大量可拓展组件,并需要组装这些组件的场景。 三、解决方案 抽象工厂模式的UML图如下所示。 代码如下: public clas... 阅读全文
摘要:
一、模式名 外观, Facade 二、解决的问题 外观模式,顾名思义,对外提供了应用的统一外观接口。外观模式在大型系统应用比较多,大型系统中,类和方法之间的调用关系和依赖关系复杂,有时无法完全了解,比如完成某项工作,需要使用十几个类和方法完成,可能这十几个类和方法的调用顺序,只有某些核心员工才完全了解,对于新人很不友好。为了降低上层系统或调用方的复杂性,提出了外观模式,用于为上层系统或调用方提供统... 阅读全文
摘要:
一、模式名 策略, Strategy 二、解决的问题 策略,这个词中国人应该不陌生,从古代的孙子兵法,到现代的毛主席军事思想,无不充斥着策略。策略可以看做是解决问题的一种思想、办法,比如古代攻城略地,一般会使用强攻、水淹、火烧、离间、围城打援、心理战等,这些都是攻城的策略,当然这些策略有好有坏。在软件设计中,也存在很多策略,即一个问题有多种解决方法,每种解决方法可能针对不同的问题,或者每种解决方法... 阅读全文
摘要:
一、模式名 建造者, Builder 二、解决的问题 我们每天都在创建对象、使用对象,一般简单对象直接通过new创建即可。如果要创建的对象很复杂,或者创建对象的方式有很多,我们怎样才能做到高内聚低耦合?这时建造者模式就派上用场了。建造者模式通过抽象出某个对象的构造过程,具体构造实现交给子类完成,通过引入一个“第三者”,用于组装对象的建造过程,完成对象的构造。 看上去,这个模式和模板方法很类似,模板... 阅读全文
摘要:
一、 模式名 模版方法,Template Method 二、 解决的问题 模版方法在父类中定义了某种算法的骨架,在子类中实现该算法骨架中调用的某些方法,从而达到改变该算法的目的。 如果不使用这种设计模式实现某些解决流程相同,只不过具体实现不同的问题,那么需要将该问题的解决流程重复多写几遍,增加了系统代码的冗余,降低了系统代码的灵活性。如果该问题的解决流程需要调整,那么所有利用该解决流程的方案都需要... 阅读全文
摘要:
一、模式名 代理, Proxy 二、解决的问题 “代理”这个词我们应该不陌生,在我们的生活中经常使用代理。例如:很多去国外旅游的人都会通过旅游中介公司购买机票、国外景点门票以及规划路线和寻找导游等,其实这就是一种代理模式,把自己不想直接做和不了解的事情交给专业的人去做,这样更加放心,效率也更高。 在软件设计中,同样如此,很多优秀的开发框架都是会使用代理模式。在软件设计中的代理模式主要用于: 1. ... 阅读全文
摘要:
一、模式名 工厂方法, Factory Method 二、解决的问题 工厂方法,顾名思义,就是类似于工厂的方法,而工厂具有什么特点呢?我们都知道工厂可以批量生产某类商品,而设计模式正是借用了这个特点。工厂方法模式可以用于统一生成某类对象。将对象的生成统一到工厂方法中,当新增某类对象时,可以增加新对象类和对应的工厂类即可实现扩展,提高了程序的可扩展性。 三、解决方案 工厂方法分为简单工厂方法和工厂方... 阅读全文
摘要:
一、模式名 迭代器, Iterator 二、解决的问题 迭代器主要用于按照某种顺序遍历访问某个集合,提出的目的是为了解耦对集合遍历过程和集合对象。访问集合的方法有很多,使用迭代器可以自定义遍历集合元素的方法,每当新增一种访问方法时,不需要修改集合类,只需新增新的访问集合的迭代类,保证了开闭原则。 三、解决方案 迭代器的UML如下图所示 代码如下 interface Collection { ... 阅读全文