设计模式基础知识
文章目录
设计模式(狂胜)
 看到第8集
黑马
 看到131集

设计模式简称: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("收费");
	}
}
设计模式的分类

UML

 类图的作用
 
 类的表示方式
 
 完整表示的方法
 
 
类和类之间的关联关系
单向关联
 
 双向关联
 
 自关联
 
聚合关系和组合关系
聚合关系
 
 组合关系
 
依赖、继承、实现
依赖

继承

实现关系

结构型模式
装饰者模式


 
 案例
 
 装饰者模式的好处

装饰者模式的使用场景
 
外观模式

 
案例
  优缺点
优缺点
 
 缺点:
 不符合开闭原则,如果子系统有修改的话,则必须对统一调度接口进行修改
使用场景
 
组合模式

 组合模式的定义
 
相关概念
树枝节点:文件夹
 叶子节点:文件
 容器对象:
 叶子对象:
结构
抽象根节点:就是树的根
 
案例展示
 
 类图
 
组合模式分类
透明组合模式

安全组合模式
 
 
优点

 
享元模式

 
 案例

 享元模式的优缺点
 
行为型模式

模板方法模式

 
案例
 
优点
 
 缺点
 
 适用场景
 
策略模式
结构
 
 案例
 
 优点

缺点
 
 使用场景
 
命令模式

如果按照以前的方法发,不满足类对象的开闭原则(如果厨师被换掉的话,必须对服务员中的所引用的厨师对象进行修改。
定义
 
结构
 
 

 宏命令:批量处理
 undo:撤销
 redo:恢复
优点
 
缺点
 
 使用场景
 
系统可以在不同时间指定不用的请求:例如代码中的的命令执行是根据命令的先后顺序执行的。
责任链模式


 结构
 
 案例
 
优缺点

 
状态模式

如果争对电梯的状态设计不采用状态模式,会造成以下问题
ILift
package com.hjx.state;
/**
 *  电梯接口
 */
public interface ILift {
//	打开
	int OPENING_STATE=1;
//	关闭
	int CLOSE_STATE=2;
//	运行
	int RUNNING_STATE=3;
//	停止
	int STOP_STATE=4;
//	设置电梯状态的功能
	void setState(int state);
//	电梯的功能
	void open();
	void close();
	void run();
	void stop();
}
Lift
package com.hjx.state;
public class Lift implements ILift{
	private int state;
	@Override
	public void setState(int state) {
		this.state=state;
	}
	@Override
	public void open() {
		switch (state){
			case OPENING_STATE:
//				什么事都不做
				 break;
			case CLOSE_STATE:_STATE:
			     System.out.println("电梯打开了");
//			修改状态
			     setState(OPENING_STATE);
				 break;
			case STOP_STATE:_STATE:
			     System.out.println("电梯打开了");
//			修改状态
			     setState(OPENING_STATE);
				 break;
			case RUNNING_STATE:_STATE:
				 break;
		}
	}
	@Override
	public void close() {
	}
	@Override
	public void run() {
	}
	@Override
	public void stop() {
	}
}
Client
package com.hjx.state;
public class Client {
	public static void main(String[] args) {
//		创建电梯对象
		Lift lift=new Lift();
//		设置电梯状态
		lift.setState(ILift.CLOSE_STATE);
//		开门
		lift.open();
	}
}
状态模式定义
 
 结构
 
 
优缺点
 
观察者模式

 
 案例
 
优缺点

使用场景
 
中介模式
概述
 
 
结构
 
 
优缺点

使用场景
 
迭代器模式
结构
 
 
案例
 
优缺点
 
 使用场景
 
访问者模式

 
 结构
 
 
优缺点
 
使用场景
 
 
备忘录模式
定义
 
 结构
 
 
 优缺点
 
 使用场景
 
解释器模式

 定义
 
 抽象语法树
 
 结构

案例
 
优缺点

 应用场景
 
术语讲解
1.聚合
部分与整体的关系,比如汽车与汽车零部件之间的关系。部分可以脱离整体的存在。聚合是关联关系的一种特例,他体现的是整体与部分、拥有的关系,即has-a的关系
2.组合
人与鼻子、耳朵、手之间的关系,即它们是一个整体,不能分离,如果人的生命周期结束了,那么全都结束了
组合也是关联关系的一种特例,他体现的是一种contains-a的关系,这种关系比聚合更强,也称为强聚合。
 
                   
                   
                   
                   
                             本文深入探讨设计模式的基础知识,包括设计模式的意义、OOP的七大原则和23种经典设计模式的详细解析。从工厂模式到装饰者模式,再到观察者模式,逐一阐述其应用场景、优缺点及实现机制。同时,介绍了UML类图、类与类之间的关系,以及在实际开发中的应用。通过对设计模式的学习,提升软件设计的灵活性和可维护性。
本文深入探讨设计模式的基础知识,包括设计模式的意义、OOP的七大原则和23种经典设计模式的详细解析。从工厂模式到装饰者模式,再到观察者模式,逐一阐述其应用场景、优缺点及实现机制。同时,介绍了UML类图、类与类之间的关系,以及在实际开发中的应用。通过对设计模式的学习,提升软件设计的灵活性和可维护性。
          
 
       
           
                 
                 
                 
                 
                 
                
               
                 
                 
                 
                 
                
               
                 
                 扫一扫
扫一扫
                     
              
             
                  
 被折叠的  条评论
		 为什么被折叠?
被折叠的  条评论
		 为什么被折叠?
		 
		  到【灌水乐园】发言
到【灌水乐园】发言                                
		 
		 
    
   
    
   
             
            


 
            