简单说说设计模式

模板方法 我们平时经常填写的各种表格就是模板,很多重复的文字不用书写,比如我们申请银行卡的时候,需要填写如下模板。

                         信用卡申请表
客户姓名:XXX
身份证号:XXXXXXXXXXXX
本人同意以下授权,实例省略实例省略实例省略实例
省略实例省略实例省略实例省略实例省略。
                                                          申请人签名:XXXX
                                                          申请日期:XXXXX


 

只需要在XXX的地方替换为自己需要的就行,编程里使用的模板思想和这个是完全一样的,也是为了不重复写重复的代码,非常简单不过是XXX变成了抽象方法,具体的时候替换为真实的程序,在java中XXX的语法是抽象方法,替换是通过子类或匿名子类而已,示例如下:

比如我们加载博客文章,为了提升性能,我们可以使用数据库+缓存提升数据的访问速度,你会发现数据库和缓存的结合代码是共用的,不仅仅适用于文章,也适用于电商的商品展示:

XXX:

@Slf4j
public abstract class DataLoader<T> {
    public abstract T getObjectFromCache(IdPin idPin);

    public abstract T getObjectFromDb(IdPin idPin);

    public abstract void setObjectToCache(IdPin idPin, T Object);

    public T getObject(IdPin idPin, DataLoaderStrategyEnum dataLoadStrategyEnum) {
        T object = null;
        //从cache中取
        if (DataLoaderStrategyEnum.CACHE.equals(dataLoadStrategyEnum) || DataLoaderStrategyEnum.CACHE_DB.equals(dataLoadStrategyEnum)) {
            object = this.getObjectFromCache(idPin);
            if (null != object) {
                TrackContext.appendTrackInfo(String.format("redisGet blog from Redis success,id %s", idPin.getId()));
                return object;
            }
        }
        //从持久化介质取
        if (DataLoaderStrategyEnum.CACHE_DB.equals(dataLoadStrategyEnum)) {
            //从db取,如果取到放进缓存
            object = this.getObjectFromDb(idPin);
            TrackContext.appendTrackInfo(String.format("redisGet blog from db success,id %s", idPin.getId()));
            //存放Cache
            if (null != object) {
                this.setObjectToCache(idPin, object);
                TrackContext.appendTrackInfo(String.format("redisSet blog to Redis success,id %s", idPin));
            }
        }
        return object;
    }
}

具体替换XXX的子类如下:

DataLoader<CplArticle> dataLoader = new DataLoader<CplArticle>() {
        @Override
        public CplArticle getObjectFromDb(IdPin idPin) {
            return articleRepository.getCplArticleById(idPin);
        }

        @Override
        public CplArticle getObjectFromCache(IdPin idPin) {
            return articleCache.getCplArticleById(idPin.getId());
        }

        @Override
        public void setObjectToCache(IdPin idPin, CplArticle cplArticle) {
            articleCache.cacheCplArticle(idPin.getId(), cplArticle);
        }
};
var idPin = IdPin.of(articleId, flyContext.getPin());
var cplArticle = dataLoader.getObject(idPin, strategyEnum);

 

 

Java设计模式是一种被广泛应用于Java编程语言中的软件设计模式,它们是经过验证的最佳实践,可以帮助开发人员解决常见的设计问题,提高代码的可重用性、可维护性和灵活性。 以下是常见的Java设计模式: 1. 单例模式(Singleton Pattern):确保一个类只有一个实例,并提供全局访问点。 2. 工厂模式(Factory Pattern):定义一个用于创建对象的接口,但让子类决定实例化哪个类。 3. 抽象工厂模式(Abstract Factory Pattern):提供一个接口,用于创建相关或依赖对象的家族,而不需要指定具体类。 4. 建造者模式(Builder Pattern):将一个复杂的对象构建过程分解为多个简单对象的组合。 5. 代理模式(Proxy Pattern):为其他对象提供一种代理以控制对这个对象的访问。 6. 装饰器模式(Decorator Pattern):动态地给一个对象添加一些额外的职责,而不需要修改这个对象的类。 7. 观察者模式(Observer Pattern):定义了对象之间的一对多依赖关系,当一个对象改变状态时,所有依赖于它的对象都会得到通知并自动更新。 8. 策略模式(Strategy Pattern):定义一系列算法,将每个算法封装起来,并使它们可以互换。 9. 模板方法模式(Template Method Pattern):定义一个操作中的算法骨架,而将一些步骤延迟到子类中实现。 10. 适配器模式(Adapter Pattern):将一个类的接口转换为客户希望的另一个接口,使得原本由于接口不兼容而不能在一起工作的那些类可以在一起工作。 这些设计模式可以帮助Java开发人员更好地组织和设计他们的代码,提高代码的可读性和可维护性,并增加代码的灵活性和可扩展性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值