小议设计模式
一. 适配器模式(变压器模式、包装模式)
??
??? 设计角色:目标(接口)-> 适配器(类) ->源(接口)
??? 1. 类的适配器模式
??????? 通过继承的方式把源适配到目标中,如果源和源的子类都用此类适配,行不通,但这种方式很容易置换掉源的一些方法
??? 2. 对象的适配器模式
??????? 通过委派的方式把源适配到目标中,同一个适配器可以把源类和它的子类都适配到目标接口,但想要源类的方法不容易
??? 经典例子:JDBC驱动软件,,抽象的JDBC接口和各个数据库引擎的API 之间都需要相应的适配器软件,即为各个数据库引擎准备的驱动软件
?
二. 工厂模式
?? 1.简单工厂模式(静态工厂方法模式)
???? 角色: 具体工厂类(God Class)->抽象产品->具体产品
???? 例子:一个农场,种植水果,有苹果、桃等,一个全能的园丁负责所有水果的种植
???? 解释:一般是一个具体的工厂类提供一个静态方法根据具体传入的参数来产生具体的工厂类,每个工厂类可以有多个的工厂方法,分别负责创建不同的产品
???? 优点:产品的等级结构不会反映到工厂类,从而产品类的等级结构的变化不会影响到工厂类
???? 缺点:增加新的产品必然影响到工厂类的修改,这样不符合open-close原则,另外工厂类作为一个万能类负责所有产品的创建,工厂类需要判断在什么时机,来创建那一种产品这样就把对时机的判断和对具体产品的判断的逻辑混在一起导致以后程序扩展的困难
???? 简单工厂模式与单例模式和多例模式的区别和联系
?? 2. 工厂方法模式(多态工厂模式)
???? 角色: 抽象工厂类->具体工厂类->抽象产品类->具体产品类
???? 例子:一个农场,种植水果,有苹果、桃等,现在农场不再有全能的园丁来故则所有水果的种植,每一种水果都有专门的园丁负责种植
???? 优点:符合开闭原则
???? 缺点:当产品有多个等级结构时,需要同时创建和产品等级结构相配套的工厂等级,这样将会很繁琐
? 3. 抽象工厂模式?
???? 角色: 抽象工厂类->具体工厂类->抽象产品类->具体产品类
???? 例子:一个农场现在不只种植水果还种植蔬菜,而且分别种植的是热带和亚热带水果和蔬菜,这样就有了2个产品等级结构蔬果和蔬菜,以及2个?? 产品族,热带和亚热带
???? 解释:产品族和等级结构组成2相图,这2个要素可以唯一确定一种产品
???? 优点:增加新的产品族,支持开闭原则
???? 缺点:增加心的产品结构不支持开闭原则
??? 总之工厂模式是一种产生某种产品实例的方式,这个实例也许是缓存在工厂类,也许是最新创建的,但绝度是工厂类自身创建的,并且创建实例的类型是抽象产品类型,它避免了客户创建产品的责任,而是直接消费产品,实现了产品的分割
?
?
?
?
?
?
?
?
?
?