文章目录 一、工厂方法模式简介 二、工厂方法模式适用场景 三、工厂方法模式优缺点 四、工厂方法模式代码示例 1、产品抽象类 2、产品实现类 1 3、产品实现类 2 4、抽象工厂类 5、实现工厂类 1...6、实现工厂类 2 7、测试类 五、扩展上述工厂方法模式 1、扩展的产品实现类 2、扩展的工厂实现类 3、测试类 一、工厂方法模式简介 ---- 工厂方法模式 : 定义一个 创建对象 的 接口 , 让...实现这个接口的子类 决定 实例化哪个类 , 工厂方法让 类的实例化 推迟到子类中进行 ; 工厂方法模式类型 : 创建型 ; 创建 实例对象 过程可能会很复杂 , 有可能会 导致大量的重复代码 , 工厂方法模式...; /** * 工厂类抽象 * 具体的创建 产品对象 的工厂类 , 继承该抽象类 * 客户端实际创建对象时 , 调用的是工厂类子类实现 * * 该类中只有 1 个抽象方法...视频 五、扩展上述工厂方法模式 ---- 如果要扩展一个新类型的视频 , 如 Kotlin 视频 ; 只需要新增加一个 Vedio 子类 和 一个 VedioFactory 子类 即可 ; 1、扩展的产品实现类
创建型 结构型 行为型 案例实现 《大话设计模式》C++版 《大话设计模式》Python版 创建型模式 工厂方法模式(Factory Method) 工厂方法模式:定义一个用于创建对象的接口...桥接模式(Bridge) 对象的继承关系编译时已确定,所以无法在运行时修改从父类继承的实现。由于紧耦合,父类中任何的改变必然会导致子类发生变化。...可以保证每个类封装集中在单个任务上,不会出现规模太大的类及继承结构。 桥接模式:抽象类和其派生类分离,各自实现自己的对象。...策略模式:定义算法家族并分别封装,他们完成的工作相同,只是实现不同,可以互相替换。继承有助于析取这些算法的公共功能。此模式让算法的变化不会影响到使用算法的用户。...委托可看作函数的类,委托的实例代表具体函数。在主题对象内声明委托,不再依赖抽象观察者。 一个委托可以搭载多个相同原形和形式(参数和返回值)的方法,这些方法不需要属于一个类,且被依次唤醒。
本文旨在快速梳理常用的设计模式,了解每个模式主要针对的是哪些情况以及其基础特征,每个模式前都有列举出一个或多个可以深入阅读的参考网页,以供读者详细了解其实现。...角色 Product:抽象产品,工厂方法模式所创建的对象的超类,也就是所有产品类的共同父类或共同拥有的接口。在实际的系统中,这个角色也常常使用抽象类实现。...策略模式和工厂方法的异同 工厂模式和策略模式的区别在于实例化一个对象的位置不同,对工厂模式而言,实例化对象是放在服务端的,即放在了工厂类里面; 而策略模式实例化对象的操作在客户端 工厂模式要求服务端的销售部门足够灵敏...一个抽象类可以有任意多个模板方法,而不限于一个。每一个模板方法都可以调用任意多个具体方法。 基本方法 基本方法又可以分为三种 抽象方法:一个抽象方法由抽象类声明,由具体子类实现。...具体方法:一个具体方法由抽象类声明并实现,而子类并不实现或置换。 钩子方法:一个钩子方法由抽象类声明并实现,而子类会加以扩展。通常抽象类给出的实现是一个空实现,作为方法的默认实现。
; 开发新功能时 , 尽量 不修改原有的代码 , 尽量 使用扩展增加新功能 ; 实现 开闭原则 的核心思想 是面向抽象编程 , 不是面向实现编程 ; 定义的 对象类型 是 抽象类类型 或 接口类型 ,...调用的方法 是 抽象类 或 接口 中的方法 ; 抽象是 稳定的 , 让类依赖于抽象 , 对于修改来说就是封闭的 ; 通过 面向对象 的 继承 , 以及 多态机制 , 可以实现 对 抽象 的 继承 ,...从而实现模块之间的 松耦合 , 降低模块间的耦合性 ; 使用依赖倒置原则时的注意点 : 每个类都 尽量 实现自接口 或 继承抽象类 ; 尽量 避免从具体的类派生 ; 尽量 不要覆盖基类方法 ; 依赖倒置原则的优点...将 创建对象的过程 推迟到子类实现 , 创建对象的任务 , 委托给 多个 工厂子类 中的某一个 , 客户端不需要关心是哪个 工厂子类 创建的 产品对象 ; 工厂子类 一般都是 需要的时候 , 动态指定...| 适用场景 | 优缺点 | 产品等级结构和产品族 | 代码示例 ) 抽象工厂模式 : 提供 一个 创建 一系列 相关 或 相互依赖 对象 的接口 ; 创建目标对象时 , 只需要直到对象的抽象类型或接口类型即可
1.一个类可以实现多个接口 ,但却只能继承最多一个抽象类。 2.抽象类可以包含具体的方法 , 接口的所有方法都是抽象的。...通俗的解释:装饰模式就是给一个对象增加一些新的功能,而且是动态的,要求装饰对象和被装饰对象实现同一个接口,装饰对象持有被装饰对象的实例。 适配器模式:将一个类的接口,转换成客户期望的另一个接口。...首先来看看这两者的定义区别: 工厂模式:定义一个用于创建对象的借口,让子类决定实例化哪一个类 抽象工厂模式:为创建一组相关或相互依赖的对象提供一个接口,而且无需指定他们的具体类 个人觉得这个区别在于产品...一个抽象工厂类,可以派生出多个具体工厂类 一个抽象工厂类,可以派生出多个具体工厂类 每个具体工厂类只能创建一个具体产品类的实例 每个具体工厂类可以创建多个具体产品类的实例 18.什么时候使用享元模式?...全局只允许有一个实例,比如: Runtime.getRuntime(); 5)装饰器 为一个对象动态的加上一系列的动作,而不需要因为这些动作的不同而产生大量的继承类。
1、适配器模式: 适用:将某个类的接口转换成客户端期望的另一个接口表示,实现接口兼容。 类继承方式: 利用适配器类继承目标类,并实现被适配者方法,通过方法调方法实现目标类调用被适配者方法。...8、装饰器模式:(Decorator) 给对象动态的增加一些新的功能,要求装饰对象和被装饰对象实现同一个接口,装饰对象持有被装饰对象的实例。 适用场景:需要扩展一个类的功能。...14、模板方法模式:(Template Method) 在抽象类中定义一个主方法,再定义1...n个方法,可以抽象或者实际的方法,之后定义一个类,继承该抽象类重写抽象方法,父类通过调用抽象类,实现对子类的调用...(2)单例模式:类只实例化一次 (3)建造者模式:用来创建复合对象,隐藏实现细节。 (4)原型模式:对象复制,减少对象创建。...(8)外观模式:将多个类放到一个类中,降低类间耦合度。 (9)桥接模式:事物内部抽象类具体实现不同,相同方法产生不同结果,分离抽象和实体。
抽象工厂模式包括抽象工厂、具体工厂、抽象产品、具体产品4中角色。每一个具体工厂代表了一个对象族,都提供了多个工厂方法用于生产多种不同类型的产品,这些产品构成了一个对象族。...单例设计模式: 单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例,这个类成为单例类。单例模式的实现一般是构造函数私有化、自行实例化一个实例并提供静态函数供整个系统访问这个实例。...一个JDBC驱动程序可以动态地将一个特定类型的数据库与一个Java应用程序绑定在一起,从而实现抽象角色与实现角色的动态耦合。...具体模版实现父类所定义的一个或多个抽象方法,它们是一个顶级逻辑的组成步骤。...状态模式: 很多情况下,一个对象的行为取决于一个或多个动态变化的属性,这样的属性叫做状态。当一个这样的对象与外部事件产生交互时,其内部状态就会改变,使得系统的行为也随之发生变化。
在Java中它往往由一个具体类实现 抽象产品角色:它一般是具体产品继承的父类或者实现的接口。在Java中由接口或者抽象类来实现 具体产品角色:工厂类所创建的对象就是此角色的实例。...是具体工厂角色必须实现的接口或者必须继承的父类。在java中它由抽象类或者接口来实现 具体工厂角色:它含有和具体业务逻辑有关的代码。...由应用程序调用以创建对应的具体产品的对象 抽象产品角色:它是具体产品继承的父类或者是实现的接口。在java中一般有抽象类或者接口来实现 具体产品角色:具体工厂角色所创建的对象就是此角色的实例。...在java中由具体的类来实现 工厂方法模式使用继承自抽象工厂角色的多个子类来代替简单工厂模式中的“上帝类”。...换言之,策略模式只适用于客户端知道算法或行为的情况 由于策略模式把每个具体的策略实现都单独封装成为类,如果备选的策略很多的话,那么对象的数目就会很可观 Spring策略模式的实现 Spring 中策略模式使用有多个地方
抽象类 (1)对抽象类的使用是通过关键字extends (2)不能被实例化,可以定义子类必须实现的方法 (3)子类必须定义父类中的所有抽象方法,这些方法的访问控制必须和父类中一样(或者更为宽松) (4)...(7)一个类可以同时实现多个接口,但一个类只能继承于一个抽象类。 3. Final类/方法 (1)final类不能被继承 (2)final方法不能被重写 4....策略模式的三个角色: 1.抽象策略角色 2.具体策略角色 3.环境角色(对抽象策略角色的引用) 实现步骤: 1.定义抽象角色类(定义好各个实现的共同抽象方法) 2.定义具体策略类(具体实现父类的共同方法...# 工厂模式 工厂模式是我们最常用的实例化对象模式,是用工厂方法代替new操作的一种模式。...使用工厂模式的好处是,如果你想要更改所实例化的类名等,则只需更改该工厂方法内容即可,不需逐一寻找代码中具体实例化的地方(new处)修改了。为系统结构提供灵活的动态扩展机制,减少了耦合。
对比 简单工厂模式和策略模式都是三个业务子类继承抽象父类,通过传入参数到容器类(工厂模式的factory类,策略模式的Content类),选择对应的类进行行为操作。...实质是由一个工厂类根据传入的参数,动态决定应该创建并且返回哪一个产品类(这些产品类继承自一个父类或接口)的实例。...从工厂模式的代码中可以看到 工厂模式主要是返回的接口实现类的实例化对象,最后返回的结果是接口实现类中的方法,而策略模式是在实例化策略模式的时候已经创建好了,我们可以再策略模式中随意的拼接重写方法,而工厂模式是不管方法的拼接这些的...工厂模式调用方可以直接调用工厂实例的方法属性等,策略模式不能直接调用实例的方法属性,需要在策略类中封装策略后调用。...策略模式将不同的算法封装成一个对象,这些不同的算法从一个抽象类或者一个接口中派生出来,客户端持有一个抽象的策略的引用,这样客户端就能动态的切换不同的策略。
第五种是枚举类,枚举类的底层实现其实也是内部类。枚举类确保每个类对象在全局是唯一的。所以保证它是单例,这个方法是最简单的。 工厂模式 简单工厂一般是用一个工厂创建多个类的实例。...工厂模式一般是指一个工厂服务一个接口,为这个接口的实现类进行实例化 抽象工厂模式是指一个工厂服务于一个产品族,一个产品族可能包含多个接口,接口又会包含多个实现类,通过一个工厂就可以把这些绑定在一起,非常方便...代理模式 我们发现没有,代理模式说白了就是做 “方法包装” 或做 “方法增强”。 在面向切面编程中,算了还是不要吹捧这个名词了,在 AOP 中, 其实就是动态代理的过程。...策略模式 策略模式一般把一个策略作为一个类,并且在需要指定策略的时候传入实例,于是我们可以在需要使用算法的地方传入指定算法。 命令模式 命令模式一般分为命令发起者,命令以及命令接受者三个角色。...模板方法模式 模板方法一般指提供了一个方法模板,并且其中有部分实现类和部分抽象类,并且规定了执行顺序。 实现类是模板提供好的方法。而抽象类则需要用户自行实现。
1.1.3控制器对象 在应用程序的一个或多个视图对象和一个或多个模型对象之间,控制器对象充当媒介。控制器对象因此是同步管道程序,通过它,视图对象了解模型对象的更改,反之亦然。...5.5注意事项 1、剥离类中易于变化的行为,通过组合的方式嵌入抽象基类 2、变化的行为抽象基类为,所有可变变化的父类 3、用户类的最终实例,通过注入行为实例的方式,设定易变行为 防止了继承行为方式,导致无关行为污染子类...完成了策略封装和可替换性。 六、简单工厂模式 简单工厂模式中定义一个抽象类,抽象类中声明公共的特征及属性,抽象子类继承自抽象类,去实现具体的操作。...6.1应用场景 工厂方式创建类的实例,多与proxy模式配合,创建可替换代理类。 6.2优势 易于替换,面向抽象编程,application只与抽象工厂和易变类的共性抽象类发生调用关系。...6.3敏捷原则 DIP依赖倒置原则 6.4实例 项目部署环境中依赖多个不同类型的数据库时,需要使用工厂配合proxy完成易用性替换 6.5注意事项 项目初期,软件结构和需求都没有稳定下来时,不建议使用此模式
工厂模式 简单工厂一般是用一个工厂创建多个类的实例。...工厂模式一般是指一个工厂服务一个接口,为这个接口的实现类进行实例化 抽象工厂模式是指一个工厂服务于一个产品族,一个产品族可能包含多个接口,接口又会包含多个实现类,通过一个工厂就可以把这些绑定在一起,非常方便...适配器模式和代理模式的异同 比较这两种模式,其实是比较对象适配器模式和代理模式,在代码结构上, 它们很相似,都需要一个具体的实现类的实例。... 策略模式 策略模式一般把一个策略作为一个类,并且在需要指定策略的时候传入实例,于是我们可以在需要使用算法的地方传入指定算法。... 模板方法模式 模板方法一般指提供了一个方法模板,并且其中有部分实现类和部分抽象类,并且规定了执行顺序。 实现类是模板提供好的方法。而抽象类则需要用户自行实现。
调用方尽量持有接口或抽象类,避免持有具体类型的子类,以便工厂方法能随时切换不同的子类返回,却不影响调用方代码 抽象工厂模式是为了让创建工厂和一组产品与使用相分离,并可以随时切换到另一个工厂以及另一组产品...; 生成器模式(Builder)是使用多个“小型”工厂来最终创建出一个完整对象。...原型模式是根据一个现有对象实例复制出一个新的实例,复制出的类型和属性与原实例相同。...单例模式(Singleton)的目的是为了保证在一个进程中,某个类有且仅有一个实例 结构型模式主要涉及如何组合各种对象以便获得更好、更灵活的结构。...虽然面向对象的继承机制提供了最基本的子类扩展父类的功能,但结构型模式不仅仅简单地使用继承,而更多地通过组合与运行期的动态组合来实现更灵活的功能。
使用场景: 不希望或不适用使用继承的场景 接口或抽象类不稳定的场景 重用性要求较高的场景 注意: 发现类的继承有N层时,可以考虑使用桥梁模式。桥梁模式主要考虑如何拆分抽象和实现。...覆写或实现父类的方法时输出结果可以被缩小 父类的一个方法的返回值是一个类型T,子类的相同方法(重载或覆写)的返回值为S,那么里氏替换原则就要求S必须小于等于T,也就是说,要么S和T是同一个类型,要么S是...只要遵循以下的几个规则就可以: ①每个类尽量都有接口或抽象类,或者抽象类和接口两者都具备 ②变量的表面类型尽量是接口或者是抽象类 ③任何类都不应该从具体类派生(只要不超过两层的继承是可以忍受的)...使用场景: 需要扩展一个类的功能,或给一个类增加附加功能。 需要动态地给一个对象增加功能,这些功能可以再动态地撤销。 需要为一批的兄弟类进行改装或加装功能,当然是首选装饰模式。...ConcreteStrategy具体策略角色(多个) 实现抽象策略中的操作,该类含有具体的算法。 使用场景: 多个类只有在算法或行为上稍有不同的场景。 算法需要自由切换的场景。
通过定义通用的接口或抽象类,多个具体实现可以共享相同的代码,从而减少代码冗余。...这些模式通过接口或抽象类定义了通用的行为,并允许具体实现进行替换。...多态性通过封装实现了对象行为的多样性,使得相同的操作可以作用于不同的对象。 3. 抽象 抽象是指提取对象的共性,并定义通用的接口或抽象类。...方法重写和方法重载的区别 方法重写是子类重新定义父类的方法,是一种动态多态;方法重载是同一个类中定义多个参数不同的方法,是一种静态多态。 2. 类型转换 在使用多态时,可能需要进行类型转换。...在运行时,通过多态性调用具体的makeSound方法。 2. 形状绘制程序 通过定义一个通用的Shape接口或抽象类,并让不同的形状类实现或继承,可以实现一个灵活的形状绘制程序。
,或者两者都有,程序稳定性更好 变量的声明类型尽量是抽象类或接口, 这样我们的变量引用和实际对象间,就存在 一个缓冲层,利于程序扩展和优化 继承时遵循里氏替换原则 1.4 里氏替换原则 大白话解释:少继承...UML类图 点击此处进行学习 3. 设计模式 设计模式分为三种类型,共23种 创建型模式:单例模式、工厂模式、抽象工厂模式、原型模式、建造者模式。...工厂模式:多个类的创建交给一个工厂,客户端给出所需的类的类型,工厂返回该对象 抽象工厂模式:给每一类产品都创建一个工厂 原型模式:利用一个对象本体(称为原型),克隆出另一个 建造者模式:一个对象的创建过程比较复杂...解释器模式:解释一串表达式 状态模式:一个流程存在特别多的状态,使用状态模式 策略模式:把类的某一类方法(策略)抽出来作为类,实现动态改变 职责链模式(责任链模式):拦截链,轮着一个拦一个 3.1单例模式...提供了比继承更有弹性的替代方案(扩展原有对象功能) 优点 扩展一个类的功能或者给一个类添加附加职责 给一个对象动态的添加功能,或动态撤销功能。 ?
:实现了抽象产品角色所定义的接口,由具体工厂来创建,它同具体工厂之间 一一对应 抽象工厂模式 抽象工厂模式是工厂方法模式的升级版本,工厂方法模式只生产一个等级的产品,而抽象工厂模式可生产多个等级的产品...接口适配器模式也称作缺省适配模式,就是有时候一个接口的方法太多,我只想用其中的一两个,不想为其他方法提供实现,就可以通过一个抽象类为这个接口的所有方法,提供空实现,如果想用哪个方法,再提供一个子类继承这个抽象类...结构 抽象策略类(Strategy):是一个抽象角色,通常由一个接口或抽象类实现。...此角色给出所有的具体策略类所需的接口 具体策略类(ConcreteStrategy):实现了抽象策略定义的接口,提供具体的算法实现或行为 环境类(Context):持有一个策略类的引用,最终给客户端调用...系统中各算法彼此完全独立,且要求对客户隐藏具体算法的实现细节时 系统要求使用算法的客户不应该知道其操作的数据时,可使用策略模式来隐藏与算法相关的数据结构 多个类只区别在行为不同,可以使用策略模式,在运行时动态选择要执行的行为
领取专属 10元无门槛券
手把手带您无忧上云