当前位置:文档之家› JAVA三种设计模式

JAVA三种设计模式

一、单例模式
简介:
1.单例模式(Singleton Pattern)是Java 中最简单的设计模式之一。

这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。

2.这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。

这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。

特点:
1.单例类只能有一个实例。

2.单例类必须自己创建自己的唯一实例。

3.单例类必须给所有其他对象提供这一实例。

介绍:
1.意图:保证一个类仅有一个实例,并提供一个访问它的全局访问点。

2.主要解决:一个全局使用的类频繁地创建与销毁。

3.何时使用:当您想控制实例数目,节省系统资源的时候。

4.如何解决:判断系统是否已经有这个单例,如果有则返回,如果没有则创建。

5.关键代码:构造函数是私有的。

实现方法:
1.懒汉试,线程不安全:多用户同时调用时不能保证对象的唯一性。

2.懒汉式,线程安全:在调用得到对象方法时,加关键字:synchronized,实现调用对象时排队(加锁),缺点是效率低下。

3.饿汉式:线程安全,但是容易产生垃圾,浪费内存,因为加载类的同时创建了自身唯一对象。

4.双检锁/双重校验锁:多用户可以同时调用,调用if条件判断对象的唯一性,即有没有创建过的对象,如果有直接返回,若没有,用户新建,因为方法有static 修饰,所以,用户新建后,其他用户调用的对象可以保证是唯一的。

二、模板模式
简介:
1.单在模板模式(Template Pattern)中,一个抽象类公开定义了执行它的方法的方式/模板。

它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。

这种类型的设计模式属于行为型模式。

2.意图:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。

模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。

3.主要解决:一些方法通用,却在每一个子类都重新写了这一方法。

4.何时使用:有一些通用的方法。

5.如何解决:将这些通用算法抽象出来。

6.关键代码:在抽象类实现,其他步骤在子类实现。

7.优点:1、封装不变部分,扩展可变部分。

2、提取公共代码,便于维护。

3、行为由父类控制,子类实现。

8.缺点:每一个不同的实现都需要一个子类来实现,导致类的个数增加,使得系统更加庞大。

9.使用场景:1、有多个子类共有的方法,且逻辑相同。

2、重要的、复杂的方
法,可以考虑作为模板方法。

10.注意事项:为防止恶意操作,一般模板方法都加上final 关键词。

实现方法:
简单说就是创建一个抽象父类,用子类去继承父类的抽象方法(向上转型),抽象类就是模板。

三、策略模式
简介:
1.在策略模式(Strategy Pattern)中,一个类的行为或其算法可以在运行时更改。

这种类型的设计模式属于行为型模式。

在策略模式中,我们创建表示各种策略的对象和一个行为随着策略对象改变而改变的context对象。

策略对象改变context 对象的执行算法。

2.意图:定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换。

3.主要解决:在有多种算法相似的情况下,使用if...else 所带来的复杂和难以维护。

4.何时使用:一个系统有许多许多类,而区分它们的只是他们直接的行为。

5.如何解决:将这些算法封装成一个一个的类,任意地替换。

6.关键代码:实现同一个接口。

7.优点:1、算法可以自由切换。

2、避免使用多重条件判断。

3、扩展性良好。

8.缺点:1、策略类会增多。

2、所有策略类都需要对外暴露。

9.使用场景:1、如果在一个系统里面有许多类,它们之间的区别仅在于它们的行为,那么使用策略模式可以动态地让一个对象在许多行为中选择一种行为。

2、一个系统需要动态地在几种算法中选择一种。

3、如果一个对象有很多的行为,如果不用恰当的模式,这些行为就只好使用多重的条件选择语句来实现。

10.注意事项:如果一个系统的策略多于四个,就需要考虑使用混合模式,解决策略类膨胀的问题。

实现方法:
1.创建一个接口,实现统一接口;
2.创建接口的实体类(即:用类继承接口);
3.创建Context类:封装接口的实体类,利用向上转型私有化构造器,根据构造器传参(接口的实现类)不同,调用Context的方法(返回接口的实体类的方法)。

4.注意:保持数据对应关系,如向上转型传参。

相关主题