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(); } }