常见设计模式 AI时代做一个古法编程逆行者最近vibecoding太多手写一会儿代码还别有一番风味~单例模式懒汉式public class Singleton{ private static volatile Singleton instance; private Singleton(){}; public static Singleton getInstance(){ if(instancenull){ synchronized(Singleton.class){ if(instancenull){ 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(leaveDays7){ System.out.println(通过); } else if(next!null){ next.handleRequest(leaveDays); } } } class GroupLeader extends Approver{ public void handleRequest(int leaveDays){ if(leaveDays2){ 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(); } }