工厂方法模式

工厂方法模式(Factory Method)

匿名 (未验证) 提交于 2019-12-03 00:17:01
1.1 定义 工厂方法模式,又称工厂模式、多态工厂模式和虚拟构造器模式,通过定义工厂父类负责定义创建对象的公共接口,而子类则负责生成具体的对象。 1.2 主要作用 将类的实例化(具体产品的创建)延迟到工厂类的子类(具体工厂)中完成,即由子类来决定应该实例化(创建)哪一个类。 1.3 解决的问题 工厂一旦需要生产新产品就需要修改工厂类的方法逻辑,违背了“开放 - 关闭原则 即简单工厂模式的缺点 之所以可以解决简单工厂的问题,是因为工厂方法模式把具体产品的创建推迟到工厂类的子类(具体工厂)中,此时工厂类不再负责所有产品的创建,而只是给出具体工厂必须实现的接口,这样工厂方法模式在添加新产品的时候就不修改工厂类逻辑而是添加新的工厂子类,符合开放封闭原则,克服了简单工厂模式中缺点 实现代码 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace DesignPattern { class Program { static void Main(string[] args) { FactoryCreator factoryCreator = new BlackCarFactoryMethod(); //

设计模式――工厂方法模式

匿名 (未验证) 提交于 2019-12-03 00:05:01
文章目录 设计模式――工厂方法模式 1.面向对象设计的基本原则 在了解这个模式之前,先简单了解一下面向对象设计的基本原则 2.对工厂方法模式的理解 3.工厂方法模式 3.1 我们同样还是以手机产品为简单的例子,要生产的东西是手机,手机有不同的品牌 3.2 让工厂的分工更明确 3.2.1 不管什么工厂,要做的事情只有一件,createPhone 3.2.2 给工厂详细分工 3.3 现在用户可以直接从工厂获取产品了 4.问题和思考 问题 思考 设计模式――工厂方法模式 1.面向对象设计的基本原则 在了解这个模式之前,先简单了解一下面向对象设计的基本原则 OCP(开闭原则:Open-Closed Principe):一个软件的实体应当对扩展开放,对修改关闭。这就意味着,以后要扩展新的功能,不能对当前的类进行修改来实现,而是通过增加新的类来实现。 DIP(依赖倒转原则,Dependence Inversion Principle):要针对接口编程,不要针对实现编程。以前我们编程,同时通过类和类之间的调用。这个原则意味着,以后我们在编程的时候,应该多依赖于抽象而不是具体。这个意思就是,当前有A , B 两个类。当 A 需要去调用 B 时,B应该实现一个接口。A 应该直接和 B 的接口发生关系,而不是和B 的实现发生关系。 LoD(迪亚密特,Law of Demeter):只与你直接的朋友通信

spring 中常用的设计模式

匿名 (未验证) 提交于 2019-12-02 23:34:01
一、 Spring 中常见的设计模式 工厂模式 : BeanFactory 装饰器模式: BeanWrapper 代理模式: AopProxy 单例模式: ApplicationContext 委派模式: DispatcherServlet 策略模式: HandlerMapping 适配器模式: HandlerApdapter 模板方法模式: JdbcTemplate 观察者模式: ContextLoaderListener 二、Spring 的四大模块及典型的 设计模式   4、Spring JDBC 模板方法模式

工厂方法模式

匿名 (未验证) 提交于 2019-12-02 21:53:32
1 工厂模式介绍   1.1 定义:定义一个用于创建对象的接口,让子类绝对实例化哪一个类,工厂方法使一个类的实例化延迟到其子类。   工厂方法模式通用类图:   在工厂模式中,抽象产品类Product负责定义产品的共性,实现对事物最抽象的定义,Creator为抽象类创建类,也就是抽象工厂,具体如何创建产品类是有具体的实现工厂ConcreteCreator完成的。   1.2 工厂方法模式的优点 良好的封装性,代码结构清晰。 扩展性非常优秀,在增加产品类的情况系下,只有适当的修改具体的工厂类或扩展一个工厂类,就可以“拥抱变化”。 屏蔽产品类。产品类的实现如何变化,调用者无需关心,它只需关心产品的接口,只要接口保持不变,系统中的上层模块就不需要发生变化。 解耦框架。高层模块只需要知道产品的抽象类,其他实现类都不用关心。   1.3 工厂方法模式的使用场景 2 工厂模式实现 2.1 简单工厂模式(静态工厂模式)   以实现一个计算器为例:   整个过程涉及到三个对象,人(Program4类表示)、计算器(以OperationFactory类表示)、计算方式(计算方式中有多种,加减乘除等,但都属于计算方法,以一个父类Operation,加减乘除继承覆写方法即可)。整个示例类如下图: 1 public class Program4 { 2 public static void main

java设计模式--抽象工厂模式

不问归期 提交于 2019-12-02 19:36:27
工厂方法模式中只考虑一类产品的生成,如畜牧场只养动物,而抽象工厂模式考虑多等级产品的实现 1,定义:是一种为访问类提供一个创建一组相关或相互依赖对象的接口,且访问类无需指定所需要产品的具体类就能得到同组的不同等级的产品的模式结构。它是工厂方法模式的升级。 使用抽象工厂方式要满足以下条件   系统中有多个产品族,每个具体工厂创建同一族但属于不同等级结构的产品   系统一次只能消费其中的某一族产品,即同族产品一起使用。 抽象工厂模式具有工厂方法模式的优点,还有其他优点   可以在类的内部对产品族中相关联的多等级产品共同管理,而不必引入多个新的类来进行管理   当增加一个新产品族时,不需要修改原代码,满足开闭原则 缺点   当增加一个新的产品时,所有的工厂类都需要修改   来源: https://www.cnblogs.com/javadongx/p/11760902.html

设计模式

本小妞迷上赌 提交于 2019-12-02 06:19:48
设计模式 设计模式的简单理解 一、设计模式概念概述 1、设计模式的诞生 2、设计模式的定义以及分类 设计模式的定义 设计模式的基本要素 设计模式的分类 3、GoF设计模式简介设计模式的优点 二、设计模式面向对象定义原则 原则概述 单一职责原则 开闭原则 里氏代换原则 依赖倒转原则 接口隔离原则 合成复用原则 迪米特原则 三、工厂方法模式 1、工厂方法模式结构与实现 2、工厂模式应用实例 3、工厂方法的重载 4、工厂方法的隐匿 5、工厂方法模式的优缺点与适用环境 四、抽象工厂模式 1、抽象工厂模式结构与实现 2、抽象工厂模式应用实例 3、开闭原则的倾斜性 4、抽象工厂模式优缺点与适用环境 五、单例模式 单例模式结构与实现 单例模式应用实例 饿汉式单例与懒汉式单例 单例模式优缺点与适用环境 六、适配器模式 适配器模式结构与实现 适配器模式应用实例 适配器模式优缺点和适用环境 七、桥接模式 桥接模式结构与实例 桥接模式应用实例 桥接模式与适配器模式的联用 桥接模式优缺点与适用环境 八、组合模式 组合模式结构与实现 组合模式应用实例 透明组合模式与安全组合模式 组合模式优缺点和适用环境 九、装饰模式 装饰模式结构与实现 装饰模式应用实例 装饰模式优缺点与适用环境 十、观察者模式 观察者模式结构与实现 观察者模式应用实例 设计模式的简单理解 一、设计模式概念概述 1、设计模式的诞生 A

工厂模式

荒凉一梦 提交于 2019-12-01 19:19:37
简单工厂模式是类的创建模式,又叫做静态工厂方法( Static Factory Method )模式。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。 工厂方法模式的用意是定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类中。 工厂方法模式跟简单工厂模式在结构上的不同是很明显的,工厂方法模式的核心是一个抽象工厂类,而简单工厂模式的核心在一个具体类。显而易见工厂方法模式这种结构更好扩展,权力下发,分布式比集中式更具优势。 工厂方法模式和抽象工厂模式对比 工厂方法模式是一种极端情况的抽象工厂模式,而抽象工厂模式可以看成是工厂方法模式的推广。 工厂方法模式用来创建 一个 产品的等级结构,而抽象工厂模式是用来创建 多个 产品的等级结构。 工厂方法模式只有一个抽象产品类,而抽象工厂模式有多个抽象产品类。 工厂方法模式中具体工厂类只有一个创建方法,而抽象工厂模式中具体工厂类有多个创建方法。 https://www.cnblogs.com/xiaoxi/category/1004551.html 来源: https://www.cnblogs.com/dingpeng9055/p/11714050.html

设计模式之美—工厂方法模式

纵饮孤独 提交于 2019-12-01 12:44:22
工厂方法模式    简单工厂模式 有一个问题就是,类的创建依赖工厂类。   如果想要拓展程序,必须对工厂类进行修改,这违背了闭包原则,所以,从设计角度考虑,有一定的问题,如何解决?   就用到工厂方法模式,创建一个工厂接口和创建多个工厂实现类,这样一旦需要增加新的功能,直接增加新的工厂类就可以了,不需要修改之前的代码。      新建酒的接口: 1 public interface Liqueur { 2 public void taste();//酒味 3 }   新建工厂的接口: 1 public interface Make { 2 /** 3 * 造酒的接口,造不同的酒,返回不同的酒味 4 * @return Liqueur 5 */ 6 public Liqueur makeLiqueur(); 7 } 创建酒的实现类:   (1)闷倒驴味道 1 public class Mdl implements Liqueur { 2 @Override 3 public void taste() { 4 System.out.println("我是闷倒驴,辣的!"); 5 } 6 }   (2)跑舌头味道 1 public class Pst implements Liqueur { 2 @Override 3 public void taste() { 4 System.out

设计模式-工厂方法模式

自古美人都是妖i 提交于 2019-12-01 10:34:58
工厂方法模式:又称工厂模式,也叫虚拟构造器模式或者多态工厂模式,属于类创建型模式。 在这个模式中,有4个角色 1.抽象工厂 在抽象工厂类中,声明了工厂方法,用于返回一个产品。是整个模式的 核心 ,它与应用程序无关。任何在模式中创建对象的工厂类都必须实现该接口。 2.具体工厂 是抽象工厂类的子类,实现了父类中的工厂方法。由客户调用,返回具体产品。 3.抽象产品 抽象产品是定义产品的接口,是所有产品的共同父类或者接口。 4.具体产品 实现抽象产品接口,由 专门 的具体工厂创建。 一个具体产品只能由某一个具体工厂创建,一一对应。 优点:用户只需要关心所需产品的工厂,无需知道其他细节,添加时不需要改动原来的代码,只需要增加具体工厂和具体产品类。也体现了缺点:每多一个具体产品,需要多写一个具体产品类和一个具体工厂类。 举例: 有抽象产品类 电视机,具体产品 海尔电视机和海信电视机。 有抽象工厂类 生产电视机制造厂,具体工厂 海尔制造厂和海信制造厂。 package factory; public abstract class TV{ public abstract void play(); }//TV作为抽象产品类,可以是接口或者抽象类。包含了所有产品都具有的业务方法play() TV.java package factory; public interface TVFactory{

Java的23种设计模式,详细讲解(一)

橙三吉。 提交于 2019-12-01 10:20:15
本人免费整理了Java高级资料,涵盖了Java、Redis、MongoDB、MySQL、Zookeeper、Spring Cloud、Dubbo高并发分布式等教程,一共30G,需要自己领取。 传送门 : https://mp.weixin.qq.com/s/JzddfH-7yNudmkjT0IRL8Q 一、概述 设计模式是解决问题的方案,学习现有的设计模式可以做到经验复用。 拥有设计模式词汇,在沟通时就能用更少的词汇来讨论,并且不需要了解底层细节。 二、创建型 1. 单例(Singleton) Intent 确保一个类只有一个实例,并提供该实例的全局访问点。 Class Diagram 使用一个私有构造函数、一个私有静态变量以及一个公有静态函数来实现。 私有构造函数保证了不能通过构造函数来创建对象实例,只能通过公有静态函数返回唯一的私有静态变量。 Implementation Ⅰ 懒汉式-线程不安全 以下实现中,私有静态变量 uniqueInstance 被延迟实例化,这样做的好处是,如果没有用到该类,那么就不会实例化 uniqueInstance,从而节约资源。 这个实现在多线程环境下是不安全的,如果多个线程能够同时进入 if (uniqueInstance == null) ,并且此时 uniqueInstance 为 null,那么会有多个线程执行