设 计 模 式
写在前面
3. 我之前学习设计模式的时候还看了刘伟博客中关于设计模式的讲解,当时自己将其博客中主要内容总结成了笔记,还有自己的代码实现。现在云盘中分享给大家,需要的自取:
1、说下你知道的设计模式有哪些?
下面 3 种类型中各挑几个常见的或者你用过的说就可以了。
工厂方法模式:
一个抽象产品类,可以派生出多个具体产品类。 一个抽象工厂类,可以派生出多个具体工厂类。每个具体工厂类只能创建一个具体产品类的实例。
抽象工厂模式:
多个抽象产品类,每个抽象产品类可以派生出多个具体产品类。 一个抽象工厂类,可以派生出多个具体工厂类。每个具体工厂类可以创建多个具体产品类的实例。
-
区别:
工厂方法模式只有一个抽象产品类,而抽象工厂模式有多个。工厂方法模式的具体工厂类只能创建一个具体产品类的实例,而抽象工厂模式可以创建多个。
-
抽象工厂模式
1. javax.xml.parsers.DocumentBuilderFactory#newInstance()
2. javax.xml.transform.TransformerFactory#newInstance()
-
建造者模式
1. java.lang.StringBuilder#append()
2. java.lang.StringBuffer#append()
-
原型模式
1. java.lang.Object#clone()
-
适配器模式
1. java.util.Arrays#asList()
2. java.util.Collections#list()
-
装饰器模式
1. IO 流的子类
2. java.util.Collections#synchronizedXXX()
-
享元模式
1. java.lang.Integer#valueOf(int)
-
代理模式
1. java.lang.reflect.Proxy
2. javax.inject.Inject
-
责任链模式
1. java.util.logging.Logger#log()
2. javax.servlet.Filter#doFilter()
5、设计模式六大原则是什么?
7. 单例模式的优缺点?
-
优点:
由于在系统内存中只存在一个对象,因此可以节约系统资源,对于一些需要频繁创建和销毁的对象单例模式无疑可以提高系统的性能。
-
缺点:
由于单例模式中没有抽象层,因此单例类的扩展有很大的困难。滥用单例将带来一些负面问题,如为了节省资源将数据库连接池对象设计为的单例类,可能会导致共享连接池对象的程序过多而出现连接池溢出;如果实例化的对象长时间不被利用,系统会认为是垃圾而被回收,这将导致对象状态的丢失。
8、请手写一下单例模式?
1. 懒汉式:用到时再去创建
public class Singleton {
private static Singleton instance;
private Singleton(){};
public static synchronized Singleton getInstance(){
if(instance == null){
instance = new Singleton();
}
return instance;
}
}
2. 饿汉式:初始化时即创建,用到时直接返回
public class Singleton {
private static Singleton instance = new Singleton();
private Singleton(){};
public static Singleton getInstance(){
return instance;
}
}
3. 静态内部类【推荐】
public class Singleton {
private static class SingletonHolder{
private static final Singleton INSTTANCE = new Singleton();
}
private Singleton(){};
public static final Singleton getInstance(){
return SingletonHolder.INSTTANCE;
}
}
4. 双重校验锁【推荐】
public class Singleton {
private volatile static Singleton singleton;
private Singleton(){};
public static Singleton getSingleton(){
if(singleton == null){
synchronized(Singleton.class){
if(singleton == null){
singleton = new Singleton();
}
}
}
return singleton;
}
}
9、树形文件目录采用的是哪种设计模式?