034--设计模式常见面试题汇总

VIP免费
2024-12-11 0 0 127.34KB 17 页 5.9玖币
侵权投诉
设计模式常见面试题汇总
1.说一下设计模式?你都知道哪些?
答:设计模式总共有 23 种,总体来说可以分为三大类:创建型模式( Creational
Patterns )、结构型模式( Structural Patterns )和行为型模式( Behavioral Patterns
)。
分类 包含 关注点
创建
型模
工厂模式、抽象工厂模式、单例模式、建造者模式、原
型模式
关注于对象的创
建,同时隐藏创
建逻辑
结构
型模
适配器模式、过滤器模式、装饰模式、享元模式、代理
模式、外观模式、组合模式、桥接模式
关注类和对象之
间的组合
行为
型模
责任链模式、命令模式、中介者模式、观察者模式、状
态模式、策略模式、模板模式、空对象模式、备忘录模
式、迭代器模式、解释器模式、访问者模式
关注对象之间的通信
下面会对常用的设计模式分别做详细的说明。
2.什么是单例模式?
答:单例模式是一种常用的软件设计模式,在应用这个模式时,单例对象的类必须保证只
有一个实例存在,整个系统只能使用一个对象实例。
优点:不会频繁地创建和销毁对象,浪费系统资源。
使用场景:IO 、数据库连接、Redis 连接等。
单例模式代码实现:
class Singleton {
private static Singleton instance = new Singleton();
public static Singleton getInstance() {
return instance;
}
}
单例模式调用代码:
public class Lesson7_3 {
public static void main(String[] args) {
Singleton singleton1 = Singleton.getInstance();
Singleton singleton2 = Singleton.getInstance();
System.out.println(singleton1 == singleton2);
}
}
程序的输出结果:true
可以看出以上单例模式是在类加载的时候就创建了,这样会影响程序的启动速度,那如何
实现单例模式的延迟加载?在使用时再创建?
单例延迟加载代码:
// 单例模式-延迟加载版
class SingletonLazy {
private static SingletonLazy instance;
public static SingletonLazy getInstance() {
if (instance == null) {
instance = new SingletonLazy();
}
return instance;
}
}
以上为非线程安全的,单例模式如何支持多线程?
使用 synchronized 来保证,单例模式的线程安全代码:
class SingletonLazy {
private static SingletonLazy instance;
public static synchronized SingletonLazy getInstance() {
if (instance == null) {
instance = new SingletonLazy();
}
return instance;
}
}
3.什么是简单工厂模式?
答:简单工厂模式又叫静态工厂方法模式,就是建立一个工厂类,对实现了同一接口的一
些类进行实例的创建。比如,一台咖啡机就可以理解为一个工厂模式,你只需要按下想喝
的咖啡品类的按钮(摩卡或拿铁),它就会给你生产一杯相应的咖啡,你不需要管它内部
的具体实现,只要告诉它你的需求即可。
优点
工厂类含有必要的判断逻辑,可以决定在什么时候创建哪一个产品类的实例,客户端
“ ”可以免除直接创建产品对象的责任,而仅仅 消费 产品;简单工厂模式通过这种做法
实现了对责任的分割,它提供了专门的工厂类用于创建对象;
客户端无须知道创建的具体产品类的类,只需要知道具体产品类对应的数即
可,对于一些复杂的类,通过简单工厂模式可以减少使用者的记忆量
通过引入置文件,可以在不修改任何客户端代码的情况更换的具体产品
类,在一定程度上提了系统的灵活性
易拓展,一旦添的产品类型,就不修改工厂的创建逻辑;
产品类型多时,工厂的创建逻辑可能过于复杂,一可能造成所有产品的创建
失败,不于系统的维护
简单工厂示意图如下:
1
简单工厂 代码实现
class Factory {
public static String createProduct(String product) {
String result = null;
switch (product) {
case "Mocca":
result = "摩卡";
break;
case "Latte":
result = "拿铁";
break;
default:
result = "其他";
break;
}
return result;
}
}
4.什么是抽象工厂模式?
答:抽象工厂模式是在简单工厂的基础将未来可能需要修改的代码抽象出来,通过继承
的方式让子做决定。
比如,以上面的咖啡工厂为例,某天我的口味突然变了,不想喝咖啡了想喝啤酒,这个时
候如果直接修改简单工厂面的代码,这种做法不合软件设计的
每次新增品类都要修改原来的代码。这个时候就可以使用抽象工厂类了,
抽象工厂明方法,具体的实现类(工厂)实现,这个时候再有新增品类
的需求,只需要创建代码即可。
抽象工厂实现代码如下:
public class AbstractFactoryTest {
public static void main(String[] args) {
// 抽象工厂
String result = (new CoffeeFactory()).createProduct("Latte");
System.out.println(result); // output:拿铁
}
}
// 抽象工厂
abstract class AbstractFactory{
public abstract String createProduct(String product);
}
// 啤酒工厂
class BeerFactory extends AbstractFactory{
@Override
public String createProduct(String product) {
String result = null;
switch (product) {
case "Hans":
result = "汉斯";
摘要:

设计模式常见面试题汇总1.说一下设计模式?你都知道哪些?答:设计模式总共有23种,总体来说可以分为三大类:创建型模式(CreationalPatterns)、结构型模式(StructuralPatterns)和行为型模式(BehavioralPatterns)。分类包含关注点创建型模式工厂模式、抽象工厂模式、单例模式、建造者模式、原型模式关注于对象的创建,同时隐藏创建逻辑结构型模式适配器模式、过滤器模式、装饰模式、享元模式、代理模式、外观模式、组合模式、桥接模式关注类和对象之间的组合行为型模式责任链模式、命令模式、中介者模式、观察者模式、状态模式、策略模式、模板模式、空对象模式、备忘录模式、迭...

展开>> 收起<<
034--设计模式常见面试题汇总.docx

共17页,预览4页

还剩页未读, 继续阅读

声明:本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。玖贝云文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知玖贝云文库,我们立即给予删除!
分类:计算机 价格:5.9玖币 属性:17 页 大小:127.34KB 格式:DOCX 时间:2024-12-11

开通VIP享超值会员特权

  • 多端同步记录
  • 高速下载文档
  • 免费文档工具
  • 分享文档赚钱
  • 每日登录抽奖
  • 优质衍生服务
/ 17
客服
关注