单例模式
定义:确保一个类只有一个实例,并提供一个全局访问点来访问这个唯一实例
角色:Singleton(单例)
结构图:代码实现:
public class Singleton {
private static Singleton instance =null;
private Singleton(){
}
public static Singleton getInstance(){
if(instance==null)
instance=new Singleton();
return instance;
}
}
优点:
1、单例模式提供了对唯一实例的受控访问。
2、由于在系统内存中只存在一个对象,因此可以节约系统资源。
3、允许可变树木的实例
缺点:
1、没有抽象层,扩展有很大困难
2、职责过重,在一定程度上违背了单一职责原则
3、如果实例化对象长时间不被利用,系统会认为他是垃圾,会自动销毁并回收资源下次利用又将重新实例化,这将导致共享的单例对象状态丢失
适配器模式
定义:讲一个类的接口转换成客户希望的另一个接口,适配器模式让那些接口不兼容的类可以一起工作
角色:
1)Target(目标抽象类)2)Adapter(适配器类)3)Adaptee(适配者类)
结构图:代码实现:
CarController:汽车控制类,充当目标抽象类
//designpatterns.adapter.CarController.java
package designpatterns.adapter
public abstract class CarController{
public void move(){
System.out.println("玩具汽车移动!");
}
public abstract void phonate();//发出声音
public abstract void twinkle();//灯光闪烁
}
优点:
1、将目标类和适配者类解耦,通过引入一个适配器来重用现有的适配器类,无须修改原有结构
2、增加类的透明性和复用性,将具体的业务实现过程封装在适配者类中,对于客户端类而言是透明的,而且提高了适配者的复用性,同一个适配者类可以再多个不同的系统中复用。
3、灵活性和扩展性都非常好,通过使用配置文件可以很方便的更换适配器,也可以在不修改原有代码的基础上增加新的适配器类,完全符合开闭原则
缺点:
1、对于不支持多重类继承的语言,一次最多只能配置一个适配者类,不能同时适配多个适配者
2、适配者类不能最为最终类
3、在java等语言中,类适配器模式模式中的目标抽象类只能为接口,不能为类,其使用有一定局限