常见设计模式

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();
	}
}
相关推荐
玖石书10 分钟前
ASP.NET Core 迁移至 Spring系列:类库框架篇
java·后端·asp.net
摇滚侠36 分钟前
《SpringBoot 3:入门与应用实战》第 15 章 生产级特性 监控指标 Metrics 阅读笔记
java·spring boot·笔记
啦啦啦啦啦zzzz1 小时前
设计模式:桥接模式和组合模式
c++·设计模式·组合模式·桥接模式
弹简特1 小时前
【Java项目-企悦抽】11-用户与认证模块-实现用户登录03(结束登录功能)-完成测试+对接前端+登录拦截器
java·开发语言
大模型丫丫1 小时前
Loop Engineering:从强化学习视角看 Agent 循环的本质
java·人工智能·学习
数电发票API2 小时前
税局接口,需要的来~~
java
骇客野人2 小时前
IntelliJ IDEA 使用技巧
java·ide·intellij-idea
Jul1en_2 小时前
【Java 脚手架】封装通用工具类-1
java·spring boot·分布式·spring·spring cloud
我命由我123453 小时前
Java 开发 - List subList 方法
java·windows·操作系统·list·intellij-idea·idea·intellij idea
关于不上作者榜就原神启动那件事3 小时前
从 MDC 到 Agent:我手搓的文档路由协议,在 Spring AI Alibaba 里找到了正式实现
java·人工智能·spring·ai·agent