简单的设计模式总结

本文总结了Java设计模式中的单例模式、模板设计、适配器模式、装饰设计模式和动态代理。单例模式确保类只有一个实例,适用于长期保存对象和值传递。模板设计模式用于实现功能时确定和不确定部分的分离。适配器模式是装饰模式的一种特殊形式,常用于接口转换。装饰设计模式通过缓冲流实现,增强已有功能并保持原有体系。动态代理则在反射中使用,提供运行时增强功能。
摘要由CSDN通过智能技术生成

1.设计模式

1.单例

1.作用

  1. 单例模式可以长期保存对象。
  2. 单例可以传递值:可以让两个对象在完全没有关系的前提下,实现值的传递,降低了耦合性,提高了内聚性。

注:静态方法通过类调用获取 ,所以成员变量设置成静态。
并且有了对象后,防止对象通过。调用成员变量,所以设置为私有。

2.实现

饿汉:直接获取
class SingleInstance{
	//2.在单例类的内部创建一个当前类的静态的私有化的对象
    //私有:防止获取对象后调用成员变量
    //静态:静态方法调用操作静态变量
	//只有饿汉式可以加final
	private final static SingleInstance s = new SingleInstance();
//1.创建构造方法,并私有化
private SingleInstance() {
	
}
//3.通过公共的静态的方法将singleInstance对象提供出去
public static SingleInstance getSingleInstace() {
	return  s;
}
//功能区:
int num;
public void test() {}
}
懒汉:获取时创建
class SingleInstance1{
	//2.在单例类的内部创建一个当前类的静态的私有化的对象
	private static SingleInstance1 s = null;
//1.创建构造方法,并私有化
private SingleInstance1() {	
}
//3.通过公共的静态的方法将singleInstance对象提供出去
public static SingleInstance1 getSingleInstace() {
	if (s == null) {
		s = new SingleInstance1();
	}
	return  s;
}
}
例子:runtime类

每个 Java 应用程序都有一个 Runtime 类实例,使应用程序能够与其运行的环境相连接。

2.模板设计

1.实现

实现功能时分成两部分,一部分确定,一部分不确定。不确定的交给子类,子类实现的结果又会反过来影响确定部分的功能。

public class Demo4 {
    public static void main(String[] args) {
        zi z = new zi();
        z.setFood("青草");
        z.func();
    }
}
class fu {
    public void eat() {
    }
    public void func() {
        System.out.println("要做啥饭?");
        eat();
    }
}
class zi extends fu {
    String food;

    public String getFood() {
        return food;
    }

    public void setFood(String food) {
        this.food = food;
    }

    public void eat() {
        System.out.println(food);
    }
}

3.适配器模式

1.例子
实例:要求在子类中只使用play方法

分析:Dog是继承了ZiMidel类,ZiMidel类实现了Inter接口

当Dog类想要实现Inter接口的一个方法的时候,如果直接实现Inter接口,就必须将所有的方法都实现,

如果在Dog类与Inter接口之间插入一个类,让这个类去实现Inter接口的所有方法,作为这个类的子类只需要实现自己需要的方法

我们将中间的这个类就可以成为适配器类

*/

interface Inter{
	public void play();
	public void song();
	public void run();
	public void eat();
	public void jump();
}
//适配器类
class ZiMidel implements Inter{

@Override
public void play() {
	// TODO Auto-generated method stub
	
}

@Override
public void song() {
	// TODO Auto-generated method stub
	
}

@Override
public void run() {
	// TODO Auto-generated method stub
	
}

@Override
public void eat() {
	// TODO Auto-generated method stub
	
}

@Override
public void jump() {
	// TODO Auto-generated method stub
	
}

}

//创建狗类,我只想让她实现play方法?
class Dog extends ZiMidel{
	public void play() {
		// TODO Auto-generated method stub
		

}

}

class Cat extends ZiMidel{
	public void song() {
		

}

}
2.注意

可以视为特殊的装饰设计模式

4.装饰设计模式

装饰设计模式:基于已经实现的功能,提供增强的功能.

装饰设计模式的由来就来自于对缓冲流的实现.

1.特点:从缓冲流的角度讲解

1.使流原来的继承体更加的简单

2.提高了效率

3.由于是在原有的基础上提高增强的功能,所以他还要属于原来的体系

2.实现
class MyBufferedReader extends Reader{
	//2.要有一个Reader类型的成员变量
	Reader reader;
	//3.要有一个带参数的构造方法接收外部传入的流对象
	public MyBufferedReader(Reader reader) {
		this.reader = reader;
	}
	//4.模拟readLine(),实现读一行的功能
	public String readLine() throws IOException {
		//a.创建一个临时的可变字符串,用于装当前行的字符
		StringBuffer stringBuffer = new StringBuffer();
		//b.使用read()方法读
		int num = 0;
		while ((num = this.reader.read()) != -1) {
			if (num == '\r') {
				continue;
			}else if (num == '\n') {
				return stringBuffer.toString();
			}else {
				stringBuffer.append((char)num);
			}
		}
		

	//当文本为空时
	if (stringBuffer.length() == 0) {
		return null;
	}
	
	//当文本只有一行,没有换行符
	return stringBuffer.toString();
	
	//增加效率的代码
}
//5.关闭流
public void close() throws IOException {
	//关闭自己
	this.reader.close();	
}
@Override
public int read(char[] cbuf, int off, int len) throws IOException {
	// TODO Auto-generated method stub
	return 0;
}
	
}

5.动态代理

动态代理放在了反射那里,便于和反射一起看

2.网址

1.组成

  1. 作用:实现客户端和服务器端的通信
  2. http协议:超文本传输协议,实现的是网络间的通信的一个通信规则
  3. https协议:安全的http协议—可以省略,默认是http协议
  4. 域名/IP:标记网络上的唯一一台主机 可以简化写:baidu
  5. 端口号:标记同一台主机上的某一个服务器 [0,65536]—可以省,默认80
  6. 资源路径: 可以省
  7. 查询条件: 可以省

2.注意

服务器是一个软件,例如tomcat

3.分类

  1. .com商业机构
  2. .org 非盈利组织
  3. .mil 军事机构
  4. .net 网络服务提供商
  5. .edu 教育机构

6.lambda表达式

软件版本更新
加功能
改bug
加强安全

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值