工厂类

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

孤者浪人 提交于 2019-12-18 03:45:02
概述 设计模式 :设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。 毫无疑问,设计模式于己于他人于系统都是多赢的;设计模式使代码编制真正工程化;设计模式是软件工程的基石脉络,如同大厦的结构一样。 设计模式的特点 :设计模式可以增强我们的代码的可读性,增强我们代码的可维护性,可以充分的实现我们的代码复用的原则。 我选择的是 工厂模式, 工厂设计模式是一种创建型模式,它提供了一种创建对象的最佳方式。在工厂模式中,我们创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。 对于简单工厂模式, 工厂方法模式定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。工厂方法模式中是一个子类对应一个工厂类,而这些工厂类都实现于一个抽象接口。这相当于是把原本会因为业务代码而庞大的简单工厂类,拆分成了一个个的工厂类,这样代码就不会都耦合在同一个类里了。 结构如下所示: 下面是一个实例结构图及分析 1)首先定义 1)首先定义一个工厂接口 import org.zero01.operation.Operation; public interface Factory { public Operation

(二)Spring与IOC

笑着哭i 提交于 2019-12-17 01:25:28
  控制反转(IOC)是一个概念、是一种思想。指将传统上由程序代码直接操控的对象调用权交给容器,通过容器来实现对象的装配和管理。控制反转就是对对象控制权的转移,从程序代码本省反转到了外部容器。但是,需要注意, Ioc也是有局限性的,其不能使用在分布式系统中。 即其所依赖的反转到的外部容器,必须要与控制权出让方同处于一个JVM中。   IOC是一个概念,是一种思想,其实现方式多种多样。当前比较流行的实现方式有两种:依赖注入和依赖查找。 依赖注入方式应用更为广泛。 依赖查找: 容器提供调接口上下文环境给组件,程序代码则需要提供具体的查找方式。比较典型的是依赖于JNDI系统的查找。 依赖注入: 程序代码不做定位查询,这些工作由容器自行完成。   依赖注入只指程序运行过程中,若需要调用另一个对象协助时,无须在代码中创建被调用者,而是依赖于外部容器,由外部容器创建后传递给程序。   Spring的依赖注入对调用者与被调用者几乎没有任何要求,完全支持POJO之间依赖关系的管理。    依赖注入是目前最优秀的解耦方式。 依赖注入让Spring的Bean之间以配置文件的方式组织在一起,而不是以硬编码的方式耦合在一起。 一、SpringDI的引入   1、SpringDI的底层实现原理   Spring DI = 工厂 + 反射 + 配置文件   传统开发中的面向抽象编程

简单工厂模式与工厂方法模式的区别

与世无争的帅哥 提交于 2019-12-15 13:43:18
转发请注明出处: http://blog.csdn.net/qq_28055429/article/details/51628921 One----简单工厂模式: 一,基本知识: (1)定义: 简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一。 (2)理解: 简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例 。简单工厂模式是工厂模式家族中最简单实用的模 式,可以理解为是不同工厂模式的一个特殊实现。 二,实现方法和角色: (1)实现方式: 简单工厂模式的实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类(这些产品类继承自一个 父类或接口)的实例。 (2)角色和责任 :如图: 工厂(Creator)角色 :简单工厂模式的 核心 ,它负责实现创建所有实例的内部逻辑。 工厂类的创建产品类的方法可以被外界直接调用,创建所需的产品对象。 抽象产品(Product)角色: 简单工厂模式所创建的所有对象的父类,它负责描述所有实例所共有的公共接口。 具体产品(Concrete Product)角色: 是简单工厂模式的创建目标,所有创建的对象都是充当这个角色的某个具体类的实例。 三,优缺点: (1)优点: 在于工厂类中包含了必要的逻辑,根据客户需要的条件动态实例化相关的类, 对客户端来说

设计模式——简单工厂模式

岁酱吖の 提交于 2019-12-14 07:21:00
简单工厂模式 又称为静态工厂模式,实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类(这些产品类继承自一个父类或接口)的实例。简单工厂模式的创建目标,所有创建的对象都是充当这个角色的某个具体类的实例。 简单工厂模式的优点 在于实现对象的创建和对象的使用分离,将对象的创建交给专门的工厂类负责,但是其最大的缺点在于工厂类不够灵活,增加新的具体产品需要修改工厂类的判断逻辑代码,而且产品较多时,工厂方法代码将会非常复杂。 因此适用于工厂类负责创建的对象比较少的情况 以手机为例,我们可以认为不同品牌,型号的的手机都属于手机这个类别,那么假设我们要得到一个具体型号的手机,就可以写成简单工厂模式来获取。 1,首先定义手机这个东西的抽象接口 //苹果手机 public abstract class Phone{ //获取手机名称 public void getName(); } 2,定义HuaWeiP30 ,Xiaomi9 ,iphoneXR 这三个具体型号的手机。 public class HuaWeiP30 implements ApplePhone{ @Override public void getName() { Console.WriteLine("HuaWeiP30 手机"); } } public class Xiaomi9 implements Phone{

杭-设计模式整理

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

Java设计模式之工厂模式

坚强是说给别人听的谎言 提交于 2019-12-13 11:33:29
文章目录 一、简单工厂模式 1.概述 2.实现 二、工厂方法模式 1.简述 2.实现 三、抽象工厂模式 1.概述 2.实现 三、总结 1.工厂模式优点 2.工厂模式适用场景 3.三种模型的区别 一、简单工厂模式 1.概述 简单工厂模式也叫静态工厂模式,将所有的创建对象任务交给了一个工厂类来实现,要想使用对象,直接找工厂类即可。 以动物工厂类为例,可以将创建动物对象的任务全放在动物工厂类来实现,在动物工厂类中定义静态方法,根据传递不同的参数类创建不同的动物对象。 要素分析: 定义抽象类:动物具有共同的属性:吃,因此可以创建一个动物抽象类,定义“吃”的抽象方法 定义具体的操作类:动物有很多,以猫和狗为例,创建猫类和狗类,继承动物类,实现“吃”的抽象方法 定义简单工厂:根据传递不同的参数类创建不同的动物对象 测试类:调用工厂类创建对象 2.实现 1.定义抽象类 public abstract class Animal { public abstract void eat ( ) ; } 2.定义具体的操作类 public class Cat extends Animal { public void eat ( ) { System . out . println ( "猫吃鱼" ) ; } } public class Dog extends Animal { public void

设计模式--工厂模式

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

23种设计模式知识点详细解析(含PDF学习资料)

可紊 提交于 2019-12-10 23:37:21
前言: Java 中一般认为有 23 种设计模式,我们不需要所有的都会,但是其中常用的几种设计模式应该去掌握。下面列出了所有的设计模式。虽然不需要全会,当然能掌握的越多越好。 总体来说设计模式分为三大类: 创建型模式 共5种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 结构型模式 共7种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。 行为型模式 共11种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。 由于篇幅的限制,没有办法把23种设计模式全部详细的分享给大家,但是整理成了Pdf资料可以分享,关注我的供种浩(Java周某人)即可 一.单例模式(Singleton Pattern) 定义: Ensure a class has only one instance, and provide a global point of accessto it.(确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。) 通用代码(是线程安全的) 使用场景: ● 要求生成唯一序列号的环境; ● 在整个项目中需要一个共享访问点或共享数据,例如一个 Web 页面上的计数器,可以不用把每次刷新都记录到数据库中,使用单例模式保持计数器的值,并确保是线程安全的; ●

工厂模式

允我心安 提交于 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-10 18:43:26
定义 Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种 动态获取信息以及动态调用对象方法 的功能称为java语言的反射机制。 实例 接下来呢通过一个实际的例子进行反射的解释,更加高级的解释和属性请看: https://www.jianshu.com/p/9be58ee20dee package test; //工厂类 public class Factory { public static CaluTemplate createOperator(String operate){ CaluTemplate calu=null; try{ // 通过读取配置文件的工具类,从配置文件中寻找用户输入的运算符,并返回运算符所对应的运算类名称 String value= Read.readPro(operate); // 利用反射实例化对应的运算类 calu=(CaluTemplate)Class.forName("test."+value).newInstance(); }catch(Exception e){ e.printStackTrace(); } return calu; } } package test; import java.io.IOException; import java.io