1.设计模式
1.单例
1.作用
- 单例模式可以长期保存对象。
- 单例可以传递值:可以让两个对象在完全没有关系的前提下,实现值的传递,降低了耦合性,提高了内聚性。
注:静态方法通过类调用获取 ,所以成员变量设置成静态。
并且有了对象后,防止对象通过。调用成员变量,所以设置为私有。
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.组成
- 作用:实现客户端和服务器端的通信
- http协议:超文本传输协议,实现的是网络间的通信的一个通信规则
- https协议:安全的http协议—可以省略,默认是http协议
- 域名/IP:标记网络上的唯一一台主机 可以简化写:baidu
- 端口号:标记同一台主机上的某一个服务器 [0,65536]—可以省,默认80
- 资源路径: 可以省
- 查询条件: 可以省
2.注意
服务器是一个软件,例如tomcat
3.分类
- .com商业机构
- .org 非盈利组织
- .mil 军事机构
- .net 网络服务提供商
- .edu 教育机构
6.lambda表达式
软件版本更新
加功能
改bug
加强安全