设计模式(1)
单例模式
单例模式是单例对象的类只能允许一个实例存在。
实现方法:
1.将该类的构造器私有化,这样其他处的代码无法通过该类的构造来实例化该类的对象,只有通过该类的静态方法来得到该类的唯一实例
2.在该类提供一个静态方法,调用方法时,如果类持有的引用不为空就返回这个引用,如果类保持的引用为空就创建该类的实例并将实例的引用赋予该类保持的引用。
恶汉模式
初始化静态方法时,类持有的引用不为空;启动慢,引用快。
懒汉模式
初始化静态方法时,类持有的引用为空;启动快,引用慢。
优点:
在内存中只有一个对象,节省内存空间;
避免频繁的创建销毁对象,可以提高性能;
避免对共享资源的多重占用,简化访问;
为整个系统提供一个全局访问点。
缺点:
不适用与变化频繁的对象;
滥用单例带来一些负面问题,
简单工厂模式
简单工厂模式就是创建一个工厂类,根据传入的参数类型来创建具体的产品对象,并返回产品对象的实例
主要适用于调用者不知道应该创建哪个具体的对象,只能根据传入的条件 返回相应对象的场景
简单工厂模式的好处在于将对象的创建过程和使用过程进行耦合,减少新增具体产品是修改代码的复杂度
工厂方法模式
工厂方法模式是定义一个工厂接口基类,基类中定义一个创建产品的抽象方法,每个产品需要有自己的工厂来实现这个基类,并完成创建对应产品实例的方法,由具体的产品调用该方法来创建对象
主要适用于调用者已经明确知道需要创建一个具体产品的场景
工厂方法模式优点在于完全符合开闭原则,在新增产品时不需要再改动已存在的代码,使工厂类和产品类的代码完全解耦,更利于程序的扩展
缺点明显,新增产品是,需要同时新增产品类和工厂类,导致系统中的类是成对增加,增加系统的复杂度
抽象工厂模式
抽象工厂模式是将一定共性的产品封装到一块,由工厂类分别为这些产品提供创建对象的方法,调用者可以根据不同的需求调用工厂类的具体方法来获得产品实例
优点在于将具有一定共性的产品集合封装到一起,在实际开发中更符合具体的业务场景
缺点在于降低了系统的扩展性,当新增产品时需要修改工厂类,在工厂类的基类和实现类都需要增加对应的方法