工厂模式
工厂方法模式有两个抽象类,一个是产品抽象类,一个是工厂抽象类,若干个具体产品类和对应的具体工厂类,具体产品抽象类与产品抽象类是实现关系,与具体工厂类是依赖关系,具体工厂类与抽象工厂类是实现关系。

客户端代码如下

工厂模式是定义一个用于创建对象的接口,让子类决定将哪一个类实例化,工厂方法模式使一个类的实例化延迟到其子类。
(工厂模式要写的类比较多,而且无法解决产品族的问题)
抽象工厂模式
抽象工厂的具体工厂不是只是创建一种产品,而是负责创建一族产品。

抽象工厂的结构包括
1,抽象工厂
2,具体工厂
3,抽象产品
4,具体产品
可以解决不同产品族的不同产品的问题。例如A公司的电视,电脑和B公司的电视电脑,有一个相同的抽象工厂。然后创建A公司和B公司的具体工厂,创建电视和电脑的抽象产品类,延伸出A公司的电视电脑,B公司的电视电脑,A公司的具体工厂类创建A公司的具体产品,B公司创建B公司的具体产品。
例如

客户端代码:
class Client
{ public static void main(String args[])
{
DBFactory factory; //抽象工厂
Connection connection; //抽象产品
Statement statement; //抽象产品
factory = new OracleFactory(); //指定具体工厂
connection = factory.createConnection();
statement = factory.createStatement();
connection.connect();
statement.executeStatement();
}
}
单例模式
确保一个类只有一个实例,并提供一个全局访问点来访问这个唯一实例。

私有构造方法,确保其他用户无法用New创建,模式中包含一个静态的私有成员变量和静态的公有的工厂方法,该工厂方法负责检验实例的存在性并实例化自己,然后存储在静态成员变量中,以确保只有一个实例被创建。
public class Singleton
{ private static Singleton instance=null; //静态私有成员变量
//私有构造函数
private Singleton( ) {}
//静态公有工厂方法,返回唯一实例
public static Singleton getInstance()
{
if(instance==null)
instance=new Singleton();
return instance;
}
}
单例模式分为饿汉模式和懒汉模式
饿汉模式:在自己被家在的时候就将自己初始化。

懒汉模式:在调用的时候才将自己初始化。

饿汉式单例与懒汉式单例类比较
饿汉式单例类在自己被加载时就将自己实例化。单从资源利用效率角度来讲,这个比懒汉式单例类稍差些。从速度和反应时间角度来讲,则比懒汉式单例类稍好些。
懒汉式单例类在实例化时,必须处理好在多个线程同时首次引用此类时的访问限制问题,特别是当单例类作为资源控制器,在实例化时必然涉及资源初始化,而资源初始化很有可能耗费大量时间,这意味着出现多线程同时首次引用此类的机率变得较大,需要通过同步化机制进行控制
本文详细介绍了工厂模式,包括产品抽象类、工厂抽象类以及具体产品和工厂类之间的关系。接着讨论了抽象工厂模式,强调其能解决不同产品族的问题。最后阐述了单例模式,确保类只有一个实例并提供全局访问点,分为饿汉模式和懒汉模式,两种模式在资源利用和线程安全方面各有优劣。

6705

被折叠的 条评论
为什么被折叠?



