Java面试:设计模式

大致按照模式的应用目标分类,设计模式可以分为创建型模式、结构型模式和行为型模式。

创建型模式,是对对象创建过程的各种问题和解决方案的总结,包括各种工厂模式(Factory、Abstract Factory)、单例模式(Singleton)、构建器模式(Builder)、原型模式(ProtoType)。

结构型模式,是针对软件设计结构的总结,关注于类、对象继承、组合方式的实践经验。常见的结构型模式,包括桥接模式(Bridge)、适配器模式(Adapter)、装饰者模式(Decorator)、代理模式(Proxy)、组合模式(Composite)、外观模式(Facade)、享元模式(Flyweight)等。

行为型模式,是从类或对象之间交互、职责划分等角度总结的模式。比较常见的行为型模式有策略模式(Strategy)、解释器模式(Interpreter)、命令模式(Command)、观察者模式(Observer)、迭代器模式(Iterator)、模板方法模式(Template Method)、访问者模式(Visitor)。

举例:

1、InputStream 是一个抽象类,标准类库中提供了 FileInputStream、ByteArrayInputStream 等各种不同的子类,分别从不同角度对 InputStream 进行了功能扩展,这是典型的装饰器模式应用案例
public BufferedInputStream(InputStream in)

2、HTTP/2 Client API,下面这个创建 HttpRequest 的过程,就是典型的构建器模式(Builder),通常会被实现成fluent 风格的 API,也有人叫它方法链。
HttpRequest request = HttpRequest.newBuilder(new URI(uri))
                     .header(headerAlice, valueAlice)
                     .headers(headerBob, value1Bob,
                      headerCarl, valueCarl,
                      headerBob, value2Bob)
                     .GET()
                     .build();

 

手写单例模式:

public class A{
    private static A a;
    private A{};
    public static  A getA(){
        if(null == a){
            a=new A();
        }
        return a;
    }
}

以上是单线程情况下的单例模式

多线程情况下:双检锁方式:

private class A{
    private static volatile A a;
    private A{}
    public static A getA(){
        if(a==null){//避免总是进入同步代码块
            synchronized(A.class){//同步.class,意味着对同步类方法调用
                if(null == a){
                    a = new A();
                }
            }
        }
        return a;
    }
}

Spring 等如何在 API 设计中使用设计模式:

BeanFactory和ApplicationContext应用了工厂模式。

在 Bean 的创建中,Spring 也为不同 scope 定义的对象,提供了单例和原型等模式实现。

AOP 领域则是使用了代理模式、装饰器模式、适配器模式等。

各种事件监听器,是观察者模式的典型应用。

类似 JdbcTemplate 等则是应用了模板模式。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值