IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> 设计模式基础知识 -> 正文阅读

[Java知识库]设计模式基础知识

设计模式基础知识

设计模式(狂胜)
看到第8集

在这里插入图片描述

设计模式简称:GOF23(由4人帮发明)

学习设计模式的意义

在这里插入图片描述

设计模式的基本要数

1.模式名称
2.解决的问题
3解决方案
4.产生的效果

OOP的7大原则

在这里插入图片描述

工厂模式

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

简单工厂模式

在这里插入图片描述

如果增加一个产品的话,你必须对代码进行修改。不满足开发闭合原则

代码

在这里插入代码片

工厂方法模式

在这里插入图片描述

需要创建多个工厂(每增加一个产品都会新增一个工厂)
好处:不会对原代码进行修改;满足开放闭合原则
缺点:如果新增的产品过多的话,会出现很多的类;代码过度冗余。

在这里插入代码片

抽象工厂模式

创建工厂的工厂

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

这里是引用

在这里插入代码片

建造者模式

在这里插入图片描述

在这里插入图片描述

原型模式

浅克隆
在这里插入图片描述
深克隆
在这里插入图片描述

@Override
	public Object clone() throws  CloneNotSupportedException{
		// 深克隆
		Object obj=super.clone();
		Video_1 v=(Video_1)obj;
		v.createtime=(Date)this.createtime.clone(); // 将属性也进行克隆
		return v;
	}

结构型模式

适配器模式

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

桥接模式

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

代理模式

静态代理

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

动态代理

实现机制:使用反射
角色和静态代理一样
3种实现方式:1.基于接口 (JDK动态代理) 2.基于类 (cglib)、3.javasist(java字节码实现)

关键代码

package com.hjx.Proxy.dynamic;

import com.hjx.Builder.demo2.Product;
import com.hjx.Proxy.demo1.Rent;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

//代理类
public class ProxyInvocationHandler implements InvocationHandler {
//	被代理的目标对象
	private Object target;

	public void setTarget(Object target) {
		this.target = target;
	}

	//	生成代理对象
	public Object getProxy(){
		return  Proxy.newProxyInstance(this.getClass().getClassLoader(),target.getClass().getInterfaces(),this );
	}

	// 处理代理实例,并返回结果
	@Override
	public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
		seeHouse();
		Object result=method.invoke(target,args);
		charge();
		return result;
	}

	public void seeHouse(){
		System.out.println("看房子");
	}
	public void charge(){
		System.out.println("收费");
	}


}

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2021-12-26 22:00:25  更:2021-12-26 22:02:31 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 9:01:02-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码