1.创建型设计模式简述:
创建型软件设计模式是解决对象创建机制的设计模式。
创建型软件设计模式的目标是将一个系统与其对象的创建、组合、表示分离开来,其目的是在哪个对象被创建、谁负责创建对象、怎样创建对象、何时创建对象方面增强灵活性。
创建型软件设计模式的两个主导思想,封装了系统使用的具体类的知识,及隐藏这些具体类的实例被创建与结合的细节。
型软件设计模式的几种方法:
2. 创建型模式的几种方法:
首先是工厂,工厂的意义在于实现了 责任分离
(1) 简单工厂
将创建对象的方法从主方法中分离出来,由另外一个类来封装对象的创建工作(该类就是 工厂类)。然后将类的选择和对象的创建封装在一个方法(工厂方法)中,再将这个方法封装到工厂类中。
个人理解:将所有的产品继承一个公共接口;设计一个工厂类,内含接口的对象,设计一个工厂方法,能够实现为此对象附上 不同产品,并返回。
优点:需求与实现分开(责任分离) 简化判断;
缺点:不满足开闭原则; 简单工厂只是一个简单的类无法成为一个层次的类。(与工厂方法比较即可明白)
(2)工厂方法
为了满足 开闭原则 对简单工厂进行改变,将单一的工厂类改写成一个层次的类来解决。首先需要一个接口作为超类(所有工厂的超类),名为creator ,接口内有方法factory()(需要实现的工厂方法);然后可以用和产品类相同的结构生产创建者结构(继承creator),分别命名creatorA creatorB等,各自负责生产相应的产品对象如productA .productB等~
个人理解:将工厂类以及子类层次化后,实现了开闭原则。并且在出现错误时候,只需要修改局部代码即可。
优点:符合开闭原则 每个产品都对应相应的工厂。
(3)抽象方法
当遇到一系列有关联的产品类并且这些产品类具有相同的结构,如果用工厂方法容易结构复杂。
突然发现这个链接 http://blog.youkuaiyun.com/zhengzhb/article/details/7359385/ 抽象模式讲得很清楚啊。
添加一些
可以将产品和产品族等级结构画成一个二维表 方便理解。
注意抽象模式 再另外添加一个 等级结构 和 在原来的等级结构里加一个产品族时 是否都满足开闭原则。
工厂模式完了以后说一下单例模式:
单例模式为了确保一个类只有一个唯一的实例,并且提供一个全局的访问点(所有访问这个类的只能访问这个实例)。
并且单例模式在单线程模式和多线程模式下处理方式也不一样。
单线程模式下 单例模式 :
将该类的构造方法变为私有方法 ,然后该类必须提供一个可以获得实例的方法,通常称为 getInstance方法。该方法返回一个该类的实例,该类必须是静态方法,否则客户将无法调用到此方法。同时在getInstance方法中需要添加一些判断条件,使其能保证该实例唯一。
多线程模式下 单例模式 :
可以使用java程序中同步(synchronized)机制。在程序中可以将getInstance()声明为static synchronized类型。
在 synchronized类型下,程序规定每个执行该方法的线程必须彻底执行完毕以后,才能允许第二个线程执行,从而确保了唯一性。
发现一个对单例模式讲得很清楚的链接:
http://blog.youkuaiyun.com/jason0539/article/details/23297037