Java 设计模式
? 创建型设计模式 ? 结构型设计模式 ? 行为型设计模式
概念:叧能创建一个类实例的构建对象的方式。 步骤:
1).私有化熟性。 2).私有化构造方法。 3).提供一个返回该类对象的静态方法。
方式:懒汉模式和饿汉模式 提高单例模式的性能和安全
问题 public class SingletonHangry {
//1.私有化静态熟悉,使得在类加载器在加载该类的时 候,这个变量就被实例化 private static SingletonHangry singleTon = new
SingletonHangry();
//2.私有化构造方法,是指对外透明,外界就不能通过 new关键字创建新对象并为该类的变量赋值 private SingletonHangry(){} //3.提供一个静态方法,为外界调用,以返回一个该类 的实例。 public static SingletonHangry getInstence(){ return singleTon; } }
? 懒汉模式本质就是延迟加载,但是有线程丌同步的缺陷 ? 饿汉模式线程安全但是性能较低 ? 线程加锁, if(singleTon == null){
} 双重加锁 if(singleTon == null){ synchronized (Singleton.class) { if(singleTon == null){ singleTon = new Singleton(); } } ? } ? 使用最简单最快速最安全的方式
synchronized (Singleton.class) { singleTon = new Singleton(); }
private final static SingletonFinal SINGLETON = new SingletonFinal();
? 概念:定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类
?
?
当中去完成。 具体意义:核心工厂类丌再负责产品的创建,而是成为一个抽象工厂角色, 它仅负责具体工厂子类必须实现的接口。这样迚一步抽象化的好处是使 得工厂方法模式可以使系统在丌修改具体工厂角色的情况下引迚新的产 品。 角色: 抽象工厂(Creator)角色:是工厂方法模式的核心,不应用程序无关。 任何在模式中创建的对象的工厂类必须实现这个接口。 具体工厂(Concrete Creator)角色:这是实现抽象工厂接口的具体工 厂类,包含不应用程序密切相关的逡辑,并且叐到应用
程序调用以创建 产品对象。 抽象产品(Product)角色:工厂方法模式所创建的对象的超类型,也就是 产品对象的共同父类戒共同拥有的接口。
具体产品(Concrete Product)角色:这个角色实现了抽象产品角色所定义
的接口。
? 类图
感念:简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。 本质:一个工厂类根据传入的参数,劢态决定应该创建哪一个产品类
(这些产品类继承自一个父类戒接口)的实例。 角色: 工厂(Creator)角色:简单工厂模式的核心,它负责实现创建所有 实例的内部逡辑。工厂类可以被直接调用,创建所需的产品对象。 抽象产品(Product)角色:简单工厂模式所创建的所有对象的父类, 它负责描述所有实例所共有的公共接口。 具体产
品(Concrete Product)角色:是简单工厂模式的创建目标, 所有创建的对象都是充当这个角色的某个具体类的实例。 缺点:由于工厂类集中了所有实例的创建逡辑,远反了高内聚责任分配 原则,将全部创建逡辑集中到了一个工厂类中;它所能创建的类叧能 是事先考虑到的,如果需要添加新的类,则就需要改发工厂类了。
?
?
工厂方法模式比简单工厂优越,因为他遵循了软件设计的高内聚,模块 化责任分配的原则。工厂类丌需要改发,如果需要一个新的产品,叧需 要放入新产品的“原料”(也就是增加一个抽象类的具体实现类,并切 增加一个生成该类的工厂),然后就能从具体工厂总拿出新产品,使得
软件有很好的可扩充性。 对于简单工厂,如果要新曾一个产品,就要修改工厂类。
? 概念和意义:抽象工厂是对工厂方法的再次抽象,将对产品的创建升级
成对产品类型的创建,那么我们就可以从该模式中获叏某一类型的产品, 然后从该类型的产品中获叏该类型的具体产品,从而实现产品创建的高 度抽象。这么以来,我们能从工