工厂模式

设计模式(2)工厂模式

萝らか妹 提交于 2019-12-14 14:10:06
最先学三大框架,在mybatis中用到工厂模式 ,例如 SqlSessionFactory、ObjectFactory、MapperProxyFactory 目录 一. 什么是工厂模式 1. 定义 2. 设计思想 二、具体实现 三、工厂模式的优点及缺点 四、工厂模式的使用范围 一. 什么是工厂模式 1. 定义 工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。 2. 设计思想 定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类,工厂模式使其创建过程延迟到子类进行。 二、具体实现 步骤1:创建一个接口 抽象产品角色(Product):定义工厂方法所创建的对象的接口。 package com . zxy . java . factorypattern ; /** * @Description: 工厂方法创建对象的接口 * @Author: zhangxy * @Date: Created in 2019/12/13 */ public interface Work { void doWork ( ) ; } 步骤2:创建实现接口的实体类 真实的工厂(ConcreteCreator

杭-设计模式整理

丶灬走出姿态 提交于 2019-12-14 01:33:38
设计模式 1. 说一下你熟悉的设计模式? 参考: 常用的设计模式汇总,超详细! 2. 简单工厂和抽象工厂有什么区别? 简单工厂模式: 这个模式本身很简单而且使用在业务较简单的情况下。一般用于小项目或者具体产品很少扩展的情况(这样工厂类才不用经常更改)。 它由三种角色组成: 工厂类角色:这是本模式的核心,含有一定的商业逻辑和判断逻辑,根据逻辑不同,产生具体的工厂产品。如例子中的Driver类。 抽象产品角色:它一般是具体产品继承的父类或者实现的接口。由接口或者抽象类来实现。如例中的Car接口。 具体产品角色:工厂类所创建的对象就是此角色的实例。在java中由一个具体类实现,如例子中的Benz、Bmw类。 来用类图来清晰的表示下的它们之间的关系: 抽象工厂模式: 先来认识下什么是产品族: 位于不同产品等级结构中,功能相关联的产品组成的家族。 图中的BmwCar和BenzCar就是两个产品树(产品层次结构);而如图所示的BenzSportsCar和BmwSportsCar就是一个产品族。他们都可以放到跑车家族中,因此功能有所关联。同理BmwBussinessCar和BenzBusinessCar也是一个产品族。 可以这么说,它和工厂方法模式的区别就在于需要创建对象的复杂程度上。而且抽象工厂模式是三个里面最为抽象、最具一般性的。抽象工厂模式的用意为:给客户端提供一个接口

Javascript 部分设计模式的个人理解

落花浮王杯 提交于 2019-12-13 12:00:06
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 9 单例模式(确保自己使用的资源都是全局的) 1)普通单体(字面量初始化对象) var person = { name : 'zhangsan', age : 12, getAge : function(){ return this.age ; } } person.height = 185 ; 这种单体在实际开发中常用在两个地方,其一就是 匿名对象,其二就是 划分命名空间! 2 )具有局部变量的单体(动态加载数据,初始化属性,返回一个对象实例) var UserInfo = (function(){ //同闭包的原 var name = ""; //利用闭包是单体有自己的私有局部变量 var code = ""; Ajax.request("url",function(n,c){ name = n; code = c; }) return { name:name, code:code } })() 3)惰性单体(用一个私有变量代替第二种方法返回的实例) var UserInfo = (function(){ var userInfo = ""; //私有变量 function init(){ //利用闭包是单体有自己的私有局部变量 var name = ""; var code = ""; Ajax

工厂模式

依然范特西╮ 提交于 2019-12-12 08:29:35
工厂模式 工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。 介绍 定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类,工厂模式使其创建过程延迟到子类进行。 主要解决接口选择的问题 实现 1.创建一个接口 public interface FactoryTest { void test ( ) ; } 2.创建实现接口的实体类。 public class ATest implements FactoryTest { @Override public void test ( ) { System . out . println ( "ATest" ) ; } } public class BTest implements FactoryTest { @Override public void test ( ) { System . out . println ( "BTest" ) ; } } public class CTest implements FactoryTest { @Override public void test ( ) { System . out .

设计模式--工厂模式

穿精又带淫゛_ 提交于 2019-12-12 02:42:03
工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。 1 介绍 意图 :定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类,工厂模式使其创建过程延迟到子类进行。 主要解决 :主要解决接口选择的问题。 何时使用 :我们明确地计划不同条件下创建不同实例时。 如何解决 :让其子类实现工厂接口,返回的也是一个抽象的产品。 关键代码 :创建过程在其子类执行。 应用实例 : 1、您需要一辆汽车,可以直接从工厂里面提货,而不用去管这辆汽车是怎么做出来的,以及这个汽车里面的具体实现。 2、Hibernate 换数据库只需换方言和驱动就可以。 优点 : 1、一个调用者想创建一个对象,只要知道其名称就可以了。 2、扩展性高,如果想增加一个产品,只要扩展一个工厂类就可以。 3、屏蔽产品的具体实现,调用者只关心产品的接口。 缺点 :每次增加一个产品时,都需要增加一个具体类和对象实现工厂,使得系统中类的个数成倍增加,在一定程度上增加了系统的复杂度,同时也增加了系统具体类的依赖。这并不是什么好事。 使用场景 : 1、日志记录器:记录可能记录到本地硬盘、系统事件、远程服务器等,用户可以选择记录日志到什么地方

php五种设计模式

旧巷老猫 提交于 2019-12-11 00:50:30
设计模式 一书将设计模式引入软件社区,该书的作者是 Erich Gamma、Richard Helm、Ralph Johnson 和 John Vlissides Design(俗称 “四人帮”)。所介绍的设计模式背后的核心概念非常简单。经过多年的软件开发实践,Gamma 等人发现了某些具有固定设计的模式,就像建筑师设计房子和建筑物一样,可以为浴室的位置或厨房的构造方式开发模板。使用这些模板或者说设计模式 意味着可以更快地设计更好的建筑物。同样的概念也适用于软件。 设计模式不仅代表着更快开发健壮软件的有用方法,而且还提供了以友好的术语封装大型理念的方法。例如,您可以说您正在编写一个提供松散耦合的消息传递系统,也可以说你正在编写名称为观察者 的模式。 用较小的示例展示模式的价值是非常困难的。这往往有些大材小用的意味,因为模式实际上是在大型代码库中发挥作用的。本文不展示大型应用程序,所以您需要思索的是在您自己的大型应用程序中应用示例原理的方法 —— 而不是本文演示的代码本身。这不是说您不应该在小应用程序中使用模式。很多良好的应用程序都以小应用程序为起点,逐渐发展到大型应用程序,所以没有理由不以此类扎实的编码实践为基础。 既然您已经了解了设计模式以及它们的有用之处,现在我们来看看 PHP V5 的五种常用模式。 工厂模式 最初在设计模式 一书中,许多设计模式都鼓励使用松散耦合

工厂模式

允我心安 提交于 2019-12-10 22:45:55
上一篇文章写了简单工厂模式,解决了单个类冗余等问题,但是也有一些其他的问题,所有的判断类型的工作都在工厂类中实现,导致工厂类过于沉重。如果有不同的形状添加进来就必须要修改工厂类的源码,不符合开闭原则。接下来我们使用一种新的设计模式,工厂设计模式。 工厂设计模式是给每一个产品对象提供一个工厂类,针对不同的产品提供不同的产品。定义一个用于创建对象的接口,让子类jue哪一个类实例化。工厂模式会让一个类的实例化延迟到它的子类。 定义一个图形工厂 public interface GraphicalFactory { public Graphical createGraphical(); } 然后分别给圆形、三角形、方形定义工厂类 public class CircularFactory implements GraphicalFactory { @Override public Graphical createGraphical() { return new Circular(); } } public class SquareFactory implements GraphicalFactory{ @Override public Graphical createGraphical() { return new Square(); } } public class

Java中常用的设计模式

放肆的年华 提交于 2019-12-09 13:54:21
1 单例模式 简单点说,就是一个应用程序中,某个类的实例对象只有一个,你没有办法去new,因为构造器是被private修饰的,一般通过getInstance()的方法来获取它们的实例。 getInstance()的返回值是一个对象的引用,并不是一个新的实例,所以不要错误的理解成多个对象。 1 public class Singleton { 2 3 private static Singleton singleton; 4 5 private Singleton() { 6 } 7 8 public static Singleton getInstance() { 9 if (singleton == null) { 10 singleton = new Singleton(); 11 } 12 return singleton; 13 } 14 } 懒汉式写法(线程安全) 1 public class Singleton { 2 private static Singleton instance; 3 private Singleton (){} 4 public static synchronized Singleton getInstance() { 5 if (instance == null) { 6 instance = new Singleton(); 7 } 8

策略模式 和 工厂模式的区别

我是研究僧i 提交于 2019-12-08 23:08:33
目录 策略模式 Strategy Pattern 首先介绍一下策略模式: 策略模式特点 工厂模式 工厂模式特点 策略模式 Strategy Pattern 首先介绍一下策略模式: 策略模式(Strategy Pattern):定义一系列算法,将每一个算法封装起来,并让它们可以相互替换。策略模式让算法独立于使用它的客户而变化; 策略模式特点 一个类的行为或者算法可以在 运行时 更改 解决的问题 解决在一个环境下,要多种方法切换的时候,用if else麻烦。【我的理解是:如果我原来用的A算法,现在改成B,最简单的方法是,直接把 a = A算法;的下一行写成 a = B算法;一般来说,改算法要重新写代码之类的,策略模式不用,直接用生成策略法解决】 工厂模式 工厂模式特点 隐藏内部生成逻辑,用一个共同接口,生成需要的子类。 来源: https://www.cnblogs.com/mengxixi/p/12008513.html

案例分析:设计模式与代码的结构特性

喜你入骨 提交于 2019-12-08 21:12:27
抽象工厂模式    抽象工厂模式,有新的需要操作的类时,只需要创建实现了Repository接口的数据库操作类, 并创建实现了RpositoryFactoryProvider的工厂生成类,使用工厂生成类生成各个数据库操作类 的工厂,并用该工程生成数据库操作类对象,使用该对象操作数据库 一、实现要求   工厂方法模式中,工厂父类负责定义创建产品对象的公共接口,而工厂子类则负责生成具体的产品对象,这样做的目的是将产品类的实例化操作延迟到工厂子类中完成,即通过工厂子类来确定究竟应该实例化哪一个具体产品类 二、 抽象工厂模式的优点    象工厂模式除了具有工厂方法模式的优点外,最主要的优点就是可以在类的内部对产品族进行约束。所谓的产品族,一般或多或少的都存在一定的关联,抽象工厂模式就可以在类内部对产品族的关联关系进行定义和描述,而不必专门引入一个新的类来进行管理。 三、抽象工厂模式的缺点    产品族的扩展将是一件十分费力的事情,假如产品族中需要增加一个新的产品,则几乎所有的工厂类都需要进行修改。所以使用抽象工厂模式时,对产品等级结构的划分是非常重要的。 四、适用场景    当需要创建的对象是一系列相互关联或相互依赖的产品族时,便可以使用抽象工厂模式。说的更明白一点,就是一个继承体系中,如果存在着多个等级结构(即存在着多个抽象类),并且分属各个等级结构中的实现类之间存在着一定的关联或者约束