早前看设计模式的时候,发现这套东西根本不太适合小项目或者项目开发初期,但最近发现SLF4J这个项目其实也挺小的,但是设计模式玩的挺溜的,然后就想着总结一下,这个项目中用到的设计模式。
定义:工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。
在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。
public interface ILoggerFactory {
public Logger getLogger(String name);
}
public interface IMarkerFactory {
Marker getMarker(String name);
boolean exists(String name);
boolean detachMarker(String name);
Marker getDetachedMarker(String name);
}
定义:抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。
在抽象工厂模式中,接口是负责创建一个相关对象的工厂,不需要显式指定它们的类。每个生成的工厂都能按照工厂模式提供对象。
解读:这个定义看上去还是挺难理解的, 可以这么说抽象工厂就是一系列工厂的合集。譬如看下面的例子,SLF4JServiceProvider包含了ILoggerFactory 和IMarkerFactory两个工厂,SLF4JServiceProvider就是对抽象工厂模式的一个运用。
这样做有什么好处呢?更换产品实现比较容易。
ILoggerFactory 和 IMarkerFactory是日志系统中的两个重要的类,如果没有SLF4JServiceProvider这个接口,现在要把logback替换成log4j,那么这两个类就要分别去做修改。 现在有了SLF4JServiceProvider这个接口,我们只需要直接替换SLF4JServiceProvider的实现就可以完成替换了。
当然有的人,还是会觉得不就改两下么,也不麻烦。但是,你想一下,当日志系统中包含了有几十个这样的工厂类的,你再去一个一个的修改是不是就很麻烦了,而且很容易出错了,这就是这个模式的优势了。
缺点:在添加新的产品对象时,难以扩展抽象工厂来生产新种类的产品,这是因为在抽象工厂角色中规定了所有可能被创建的产品集合,要支持新种类的产品就意味着要对该接口进行扩展,而这将涉及到对抽象工厂角色及其所有子类的修改,显然会带来较大的不便。
开闭原则的倾斜性(增加新的工厂和产品族容易,增加新的产品等级结构麻烦)。
public interface SLF4JServiceProvider {
public ILoggerFactory getLoggerFactory();
public IMarkerFactory getMarkerFactory();
public MDCAdapter getMDCAdapter();
public String getRequesteApiVersion();
public void initialize();
}
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://blog.csdn.net/sweetyi/article/details/104817574
内容来源于网络,如有侵权,请联系作者删除!