设计模式解析——实验5单例模式与适配器模式

在这里插入图片描述

1. 单例模式
1)简述单例模式中的角色及其作用
2)编程。
编程分别实现饿汉单例模式、懒汉单例模式(线程安全的)、静态内部类单例模式并编写测试类。绘制类图。

2. 适配器模式
1)简述适配器模式中的角色及其作用
2)编程。
(1)有一个交流电源,输出电压为AC220V,使用适配器模式编程,实现输出电压为直流的5V电压的适配器,以供手机充电用。
分别使用类适配器和对象适配器实现。绘制类图。

1.单例模式

//饿汉单例模式

class EagerSingleton{
	private static final EagerSingleton instance =new EagerSingleton();
	
	private EagerSingleton() {}
	
	public static EagerSingleton getInstance() {
		return instance;
	}
	
	public void Print() {
		System.out.println("OK1..");
	}
}

//懒汉单例模式(线程安全的)

class LazySingleton{
	private static LazySingleton instance = null;
	
	private LazySingleton() {}
	
	public static LazySingleton getInstance() {
		if(instance == null) {
			instance = new LazySingleton();
		}
		return instance;
	}
	
	public void Print() {
		System.out.println("OK2..");
	}
}

//静态内部类单例模式

class SuoLazySingleton{
	private static SuoLazySingleton instance = null;
	
	private SuoLazySingleton() {}
	
	synchronized public static SuoLazySingleton getInstance() {
		if(instance == null) {
			instance = new SuoLazySingleton();
		}
		return instance;
	}
	
	public void Print() {
		System.out.println("OK3..");
	}
}

//测试类

public class Singleton {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		EagerSingleton s1=EagerSingleton.getInstance();
		  EagerSingleton s2=EagerSingleton.getInstance();
		  LazySingleton s3=LazySingleton.getInstance();
		  LazySingleton s4=LazySingleton.getInstance();
		  SuoLazySingleton s5=SuoLazySingleton.getInstance();
		  SuoLazySingleton s6=SuoLazySingleton.getInstance();
		  System.out.println(s1==s2);
		  System.out.println(s3==s4);
		  System.out.println(s5==s6);
		  s1.Print();
		  s3.Print();
		  s5.Print();
	}

}

运行结果

在这里插入图片描述
2.适配器模式

适配器模式一般包含以下3个角色:

(1)Target(目标抽象类):目标抽象类定义了客户所需要的接口,可以是一个抽象类或接口,也可以是一个具体的类。

(2)Adapter(适配器类):适配器可以调用另一个接口,作为一个转换器,对Adaptee和Target进行适配。适配器类是适配者模式的核心,在适配器模式中,它通过继承Target并关联一个Adaptee对象使二者产生联系。

(3)Adaptee(适配者类):适配者即被适配的角色,它定义了一个已经存在的接口,这个接口需要适配,一般是一个具体类,包含了客户希望使用的业务方法,在某些情况下可能没有适配者类的源代码。

1.对象适配器模式 代码

class AC220
{
	public int output220()
	{
		int volt = 220;
		return volt;
	}
}

abstract class DC5
{
	abstract int output5V();
}

class PowerAdater extends DC5{
	AC220 ac220 = new AC220();
	public int output5V() {
		int output = ac220.output220();
		return (output/440);
	}
}

2.类适配器模式 代码

class AC220
{
	public int output220()
	{
		int volt = 220;
		return volt;
	}
}

interface DC5
{
	public int output5V();
}

class PowerAdater extends AC220 implements DC5{
	//AC220 ac220 = new AC220();
	public int output5V() {
		int output = output220();
		return (output/440);
	}
}

2.1 适配器模式定义
  适配器模式的实现就是把客户类的请求转化为对应适配者的相应接口的调用。也就是说:当客户类调用适配器的方法时,在适配器类的内部将调用适配者类的方法,而这个过程对于客户类来说是透明的,客户类并不直接访问适配者类。因此,适配器让那些由于接口不兼容而不能交互的类可以一起工作。

发布了28 篇原创文章 · 获赞 6 · 访问量 2871

猜你喜欢

转载自blog.csdn.net/weixin_45621658/article/details/102488695