java中常用的5种设计模式

背景

Java 的设计模式有20多种,但是真实业务场景下,我常用的就这5种,基本上能解决我大部分问题。

常用的5种设计模式

一、单例模式

定义: 这个类的实例在这个项目中只能有一个。

代码:

// 列子1
@Component
public class CacheSupport {
	private final Cache<CacheKey, Object> cache = new Cache<>();
}
// 例子2
public class ExecutorService {

    private final static LinkedBlockingQueue<Runnable> WORK_QUEUE = new LinkedBlockingQueue<>(1000);

    private final static RejectedExecutionHandler HANDLER = new ThreadPoolExecutor.CallerRunsPolicy();

    private static ThreadPoolExecutor executorService = new ThreadPoolExecutor(
            20, 100, 0, TimeUnit.SECONDS, WORK_QUEUE, HANDLER
    );
	
	 public static void submit(Runnable run) {
        executorService.submit(run);
    }

    public static <T> void submit(Callable<T> call) {
        executorService.submit(call);
    }

    public static <T> void invokeAll(List<Callable<T>> call) {
        try {
            executorService.invokeAll(call);
        } catch (InterruptedException e) {
            throw new RuntimeException(e);
        }
    }
}

二、工厂模式

定义:通过工厂创建同一类业务的不同具体类的实例。

代码:

@Component
public class OrderFactory {

    @Autowired
    private List<Order> orderList;

    public Order createOrderBean(BizTypeEnum type) throws Exception {
        return orderList.stream().filter(x -> x.symbol() == type).findFirst().orElseThrow(() -> new Exception("参数有误"));
    }
}

三、接口适配器模式

定义:一个接口中有很多的方法时,可以创建一个抽象类,实现所有方法,给个空实现,我们写别的类的时候,继承抽象类,实现自己所需的方法。

代码:

public interface Order {

    public Object create(Object params);
    
    public void check(Object params);

    public BizTypeEnum symbol();
}

public abstract class AbstractOrder implements Order {

    @Override
    public Object create(Object params) {

        return null;
    }

    @Override
    public void check(Object params) {

    }
}

四、模版方法模式

定义:一个方法定义好执行步骤,每个步骤子类可以按照自己的需要实现对应的方法。

代码:

public abstract class AbstractOrder implements Order {

    @Override
    public Object create(Object params) {

        // 1.校验参数
        checkParam(params);

        // 2.价格确认
        priceConfirm(params);

        // 3.构建数据
        buildOrderData(params);

        // 4.下单
        uniOrder(params);

        // 5.入库
        saveData(params);

        return null;
    }

    protected abstract void saveData(Object params);

    protected abstract void uniOrder(Object params);

    protected abstract void buildOrderData(Object params);

    protected abstract void priceConfirm(Object params);

    protected abstract void checkParam(Object params);

    protected void check(Object params) {
    }
}

五、策略模式

定义:一个方法多种实现,根据需要选择对应的实现,可以配合上面的几种模式使用

代码:

@Component
public class AppOrderStrategy implements Order{
    @Override
    public Object create(Object params) {
        return null;
    }

    @Override
    public BizTypeEnum symbol() {
        return BizTypeEnum.APP;
    }
}
@Component
public class MiniAppOrderStrategy implements Order{
    @Override
    public Object create(Object params) {
        return null;
    }

    @Override
    public BizTypeEnum symbol() {
        return BizTypeEnum.MINI_APP;
    }
}
@Component
public class H5OrderStrategy implements Order{

    @Override
    public Object create(Object params) {
        return null;
    }

    @Override
    public BizTypeEnum symbol() {
        return BizTypeEnum.H5;
    }
}

你可能感兴趣的:(java,设计模式)