文章目录
1.什么是设计模式?
设计模式,是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性、程序的重用性。
2.说说你了解过的设计模式有哪些?
设计模式共23个,分为三种类型:
创建型模式 | 单例模式、抽象工厂模式、建造者模式、工厂模式、原型模式 |
---|---|
结构型模式 | 适配器模式、桥接模式、装饰模式、组合模式、外观模式、享元模式、代理模式 |
行为型模式 | 模版方法模式、命令模式、迭代器模式、观察者模式、中介者模式、备忘录模式、解释器模式、状态模式、策略模式、职责链模式、访问者模式 |
3.设计模式主要有哪些原则?
单一职责原则:不要让一个类承担过多的职责。避免职责耦合在一起,避免一个职责的变化影响到其他职责。
开放封闭原则:需求改变时,我们应该尽量通过拓展的方式、即加入新代码来实现变化。
里氏替换原则:只要父类出现的地方,子类就可以出现,替换为子类后不会产生任何错误和异常。
依赖倒置原则:接口或抽象类不依赖于实现类,而实现类依赖接口或抽象类。
迪米特原则:一个对象应该对其他对象有最少的了解。
接口隔离原则:建立单一接口而不是建立庞大臃肿的接口,尽量细化接口,接口中的方法尽量少。
组合复用原则:要尽量使用组合,尽量不要使用继承。
4.什么是单例模式,应用在哪里?
单例模式简单概括就是:一个类只允许创建一个实例。该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一对象的方式,可以直接访问,不需要实例化该类的对象。
单例模式分为饿汉式和懒汉式。
饿汉式:类加载就会导致该单实例对象被创建。
懒汉式:类加载不会导致该单实例对象被创建,而是首次使用该对象时才会创建。
懒汉式不是线程安全的,饿汉式是线程安全的。
应用:
游戏开发中的管理类(导演类),一般采用单例实现,容易统筹全局。
网站的计数器,一般也是采用单例模式实现,否则难以同步。
应用程序的日志应用,一般都是单例模式实现,只有一个实例去操作才好,否则内容不好追加显示。
多线程的线程池的设计一般也是采用单例模式,因为线程池要方便对池中的线程进行控制。
Windows任务管理器。
windows回收站也是典型的单例应用。在整个系统运行过程中,回收站只维护一个实例。
5.什么是简单工厂模式?
简单工厂模式的核心思想是用一个工厂类来根据输入的条件产生不同的类,再调用不同类的虚函数获得不同的结果。简单工厂模式又称为静态工厂方法模型,它属于类创建型模式。通俗的来讲就是一个工厂只做一件事,比如我要制造手机,那么这个工厂就只造手机,为什么呢,因为简单工厂返回的是一个具体的品类,并且它也能返回其他相关的品类,而这些品类都有许多共同的属性,这就需要使用基类来存放通用属性,例如手机的尺寸,屏幕的分辨率,CPU的型号。创建某些数量不多的相关类中的具体一个类对象时,比如经典的信息管理系统,学生类,教师类等继承于基本人员信息抽象类,工厂负责创建具体的这些类。
6.什么是工厂方法模式?
工厂方法模式属于类的创建型模式,它又被称为多态工厂模式。工厂方法模式的意义是定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类当中。核心工厂类不再负责产品的创建,这样核心工厂类成为一个抽象工厂角色,仅负责实现一些通用的方法和定义一些具体工厂子类必须实现的接口,这样进一步抽象化的好处是使得工厂方法模式可以使系统在不修改具体工厂角色的情况下引进新的产品。
7.什么是抽象工厂模式?
抽象工厂模式是以一个超级工厂创建其他工厂。它属于创建型模式。抽象工厂模式是工厂方法模式的升级版本,他用来创建一组相关或者相互依赖的对象。他与工厂方法模式的区别就在于,工厂方法模式针对的是一个产品等级结构,而抽象工厂模式则是针对的多个产品等级结构。
8.简单工厂模式、工厂方法模式、抽象工厂模式三者之间的区别?
简单工厂模式:只有一个简单工厂,一个产品接口/抽象类和多个产品具体类,根据简单工厂中的静态方法来创建具体产品对象。适用于产品较少,几乎不扩展的情景。
工厂方法模式:有多个工厂(抽象工厂+多个具体工厂),一个产品接口/抽象类,根据继承抽象工厂中的方法来多态创建具体产品对象。适用于一个类型的多个产品。
抽象工厂模式:有多个工厂(抽象工厂+多个具体工厂),多个产品接口/抽象类,对产品子类进行分组,根据继承抽象工厂中的方法多态创建同组的不同具体产品对象。适用于多个类型的多个产品。
9.什么是观察者模式?
观察者模式,也被称为发布订阅模式,是一种行为型设计模式,也是在实际的开发中用得比较多的一种模式,当对象间存在一对多关系时,就可以使用观察者模式。定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象(观察者对象)都得到通知并被自动更新。
10.什么是策略模式?
策略模式就是将一系列算法封装起来,并使它们之间相互替换。被封装起来的算法具有独立性外部不可改变其特性。简单来说,策略模式是将每一个算法封装到拥有共同接口的不同类中,使得算法可以在不影响客户端的情况下发生变化。