常见设计模式

AI时代,做一个古法编程逆行者 :)

最近 vibecoding 太多,手写一会儿代码,还别有一番风味~


单例模式:

懒汉式:

复制代码
public class Singleton{
	private static volatile Singleton instance;
	private Singleton(){};
	public static Singleton getInstance(){
		if(instance==null){
			synchronized(Singleton.class){
				if(instance==null){
					instance = new Singleton();
				}
			}
		}
		return instance;
	}
}

饿汉式:

复制代码
public class Singleton{
	private static final Singleton instance = new Singleton();
	private Singleton(){};
	public static Singleton getInstance(){
		return instance;
	}
}

静态内部类:

复制代码
public class Singleton{
	private Singleton(){};
	private static class Create{
		static final Singleton instance = new Singleton();
	}
	public static Singleton getInstance(){
		return Create.instance;
	}
}

工厂模式:

简单工厂模式:

复制代码
interface Button{
	void create();
}
public class WindowsButton implements Button{
	public void create(){
		System.out.println("Windows按钮创建成功!");
	}
}
public class MacButton implements Button{
	public void create(){
		System.out.println("Mac按钮创建成功!");
	}
}
public class ButtonFactory{
	public static Button createButton(String type){
		if("Windows".equalsIgnoreCase(type)){
			return new windowsButton;
		}
		else if("Mac".equalsIgnoreCase(type)){
			return new macButton;
		}
		else{
			throw new IllegalArgumentException("暂不支持该平台类型"+type);
		}
	}
}

工厂方法模式:复用上方的Button接口和两种实现类,将工厂解耦,这样添加商品时,只需要增加类,不需要修改旧类。

复制代码
interface ButtonFactory{
	Button create();
}
public class WindowsButtonFactory implements ButtonFactory{
	public Button create(){
		return new WindowsButton();
	}
}
public class MacButtonFactory implements ButtonFactory{
	public Button create(){
		return new MacButton();
	}
}

抽象工厂模式:就是在工厂方法里面返回产品族。

复制代码
interface Checkbox{
	void create();
}
public class WindowsCheckbox implements Checkbox{
	public void create(){
		System.out.println("Windows复选框创建成功!");
	}
}
public class MacCheckbox implements Checkbox{
	public void create(){
		System.out.println("Mac复选框创建成功!");
	}
}
interface AbstractFactory{
	Button createButton();
	Checkbox createCheckbox();
}
public class WindowsFactory implements AbstractFactory{
	public WindowsButton createButton(){
		return new WindowsButton();
	}
	public WindowsCheckbox createButton(){
		return new WindowsCheckbox();
	}
}
public class MacFactory implements AbstractFactory{
	public MacButton createButton(){
		return new MacButton();
	}
	public MacCheckbox createCheckbox(){
		return new MacCheckbox();
	}
}

策略模式:

复制代码
interface PayStrategy{
	void pay(int amount);
}
class WeChat implements PayStrategy{
	public void pay(int amount){
		System.out.println("微信支付成功!");
	}
}
class Credit implements PayStrategy{
	public void pay(int amount){
		System.out.println("信用卡支付成功!");
	}
}
class Pay{
	private PayStrategy strategy;
	public void setPayStrategy(PayStrategy strategy){
		this.strategy = strategy;
	}	
	public void checkOut(int amount){
		strategy.pay(amount);
	}
}

责任链模式:

复制代码
abstract class Approver{
	protected Approver next;
	public abstract void handleRequest(int leaveDays);
	public void setNext(Approver next){
		this.next = next;
	}
}
class Boss extends Approver{
	public void handleRequest(int leaveDays){
		System.out.println("通过");
	}
}
class Manager extends Approver{
	public void handleRequest(int leaveDays){
		if(leaveDays<7){
			System.out.println("通过");
		}
		else if(next!=null){
			next.handleRequest(leaveDays);
		}
	}
}
class GroupLeader extends Approver{
	public void handleRequest(int leaveDays){
		if(leaveDays<2){
			System.out.println("通过");
		}
		else if(next!=null){
			next.handleRequest(leaveDays);
		}
	}
}
class Main{
	public static void main(String[] args){
		Boss a = new Boss();
		Manager b = new Manager();
		GroupLeader c = new GroupLeader();
		c.setNext(b);
		b.setNext(a);
		c.handleRequest(7);
	}
}

更新补充 :

装饰器模式:

复制代码
abstract class MyInputStream{
	abstract public void run();
}
class FileInputStream extends MyInputStream{
	@Override
	public void run(){
	System.out.println("文件输入流");
	}
}
abstract class FilterInputStream extends MyInputStream{
	private MyInputStream in;
	public FilterInputStream(MyInputStream in){
		this.in = in;
	}
	@Override
	public void run(){
		in.run();
	}
}
class BufferInputStream extends FilterInputStream{
	public BufferInputStream(MyInputStream in){
		super(in);
	}
	@Override
	public void run(){
		super.run();
		System.out.println("输入缓冲池");
	}
}
class EpInputStream extends FilterInputStream{
	public EpInputStream(MyInputStream in){
		super(in);
	}
	@Override
	public void run(){
		super.run();
		System.out.println("加密处理");
	}
}
class Main{
	public static void main(String[] args){
		FileInputStream in = new FileInputStream();
		BufferInputStream bi = new BufferInputStream(in);
		EpInputStream ei = new EpInputStream(bi); 
		ei.run();
	}
}
相关推荐
南归北隐6 分钟前
Spring AI Alibaba Graph框架实现MCP数据库查询实战
java·后端·spring ai·mcp·spring ai mcp
古法老登瞎折腾19 分钟前
大数据智能运维实战(九):让 AI 查日志——找到异常,也保留上下文
java·大数据·运维·人工智能·spring ai·mcp
ai大模型-探索者29 分钟前
Function Call与MCP(区别、联系与实战)
java·服务器·网络
略略略咯咯34 分钟前
啊啊啊啊啊
java·服务器·数据库
SL_staff1 小时前
运维救火实战:钉钉API变更致薪资计算中断,如何用可视化逻辑引擎5分钟热修复
java·开源·全栈
猫猫.1531 小时前
HashTable、HashMap、ConcurrentHashMap 核心区别总结
java·开发语言·java-ee
郭小李2 小时前
spring mvc 工作流程
java·spring·mvc
昭昭日月明2 小时前
AI 时代的《重构》
设计模式·架构
SL_staff2 小时前
BI大屏嵌入MES的登录态难题:JVS统一账号体系实战解法
java·数据分析·数据可视化
乌暮2 小时前
综合案例:宠物电商系统
java·开发语言·spring·mvc·restful·1024程序员节