工厂类

Spring工厂类

北城以北 提交于 2019-11-27 19:14:47
/** * 读取磁盘上的配置文件 */ @Test public void demo3(){ ApplicationContext applicationContext = new FileSystemXmlApplicationContext("c:\\applicationContext.xml"); UserService userService = (UserService) applicationContext.getBean("userService"); userService.sayHello(); }    原始的工厂类BeanFactory 现在的工厂类ApplicationContext 来源: https://www.cnblogs.com/yangHS/p/11373813.html

Spring中的几点说明

两盒软妹~` 提交于 2019-11-27 18:17:13
1.Spring上下文创建bean对象   1)通过Spring上下文创建出来的bean对象都是单例的,无论我们获取多少次,获取到的都是同一个bean对象。   2)无论我们是否主动去获取bean对象,Spring上下文一加载就会创建bean对象。 2. bean的作用域   1)单例(singleton):在整个应用程序中,只创建bean的一个实例。   2)原型(prototype):每次注入或通过Spring上下文获取的时候,都会创建一个新的bean实例。   3)会话(session):在web应用中,为每个会话创建一个bean实例。   4)请求(request):在web应用中,为每个请求创建一个bean实例。   作用域为prototype时的情况: 3. 自动装配中定义的bean的作用域 @Component //@Scope("prototype") //@Scope(scopeName = "prototype") scope的name形式 @Scope ( ConfigurableBeanFactory . SCOPE_PROTOTYPE ) //常量的形式 public class CompactDis2 { public CompactDis2 ( ) { System . out . println ( "CompactDis2的无参构造方法……" +

设计模式:工厂方法模式

十年热恋 提交于 2019-11-27 15:56:09
工厂模式的意图: 定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类,工厂模式使其创建过程延迟到子类进行。 主要解决: 接口的选择问题 优点: 1、一个调用者想创建一个对象,只要知道其名称就可以了。 2、扩展性高,如果想增加一个产品,只要扩展一个工厂类就可以 3、屏蔽产品的具体实现,调用者只关心产品的接口。 缺点: 1、每次增加一个产品时,都需要增加一个具体类的对象实现工厂,使得系统中类的个数成倍增加,在一定程度上增加了系统的复杂度,同时也增加了系统具体类的依赖。 工厂方法模式分为三种: 1、普通工厂模式 共同接口: public interface Sender { public void send(); } 实现类: public class MailSender implements Sender{ @Override public void send() { System.out.println("this is mailsender..."); } } public class SmsSender implements Sender{ @Override public void send() { System.out.println("this is sms sender..."); } } 工厂类: public class SendFactory {

spring之学习归纳

倖福魔咒の 提交于 2019-11-27 15:22:22
IOC 什么是IOC? IOC: inversion of Control(控制反转:将对象的创建权交给spring) DI: 属性注入 spring的工厂类 BeanFactory: 老版本的工厂类 BeanFactory: 调用getBean的时候,才会生成类的实例. ApplicationContext: 新版本的工厂类 ApplicationContext: 在加载配置文件的时候,就会将spring管理的类都实例化. ApplicationContext有两个实现类 ClassPathXmlApplicationContext: 加载类路径下的配置文件 FileSystemXmlApplicationContext: 加载文件系统下的配置文件 spring的Bean的实例化方式(了解) Bean已经都交给spring管理,spring创建这些类的时候 ,有几种方式: 无参构造方法的方式(默认) <bean id="bean1" class="com.jxust.spring.demo1.Bean1"></bean> 2.静态工厂实例化的方式 3. 实例工厂实例化的方式 spring的属性注入 构造方法的方式的属性注入(注意:要设置对象类型的属性时,value要改成ref) <!-- 构造方法的方式 --> <bean id="car" class="com.jxust

设计模式(单例模式、工厂、简单工厂、抽象工厂、代理模式、装饰者模式、观察者模式、适配器模式)

☆樱花仙子☆ 提交于 2019-11-27 12:50:55
一、单例模式 二、代理模式 一、单例模式 1.单例模式的定义 单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例。 2.单例模式的特点 单例类只能有一个实例。 单例类必须自己创建自己的唯一实例。 单例类必须给所有其他对象提供这一实例。 3.单例模式的应用 在计算机系统中,线程池、缓存、日志对象、对话框、打印机、显卡的驱动程序对象常被设计成单例。 这些应用都或多或少具有资源管理器的功能。每台计算机可以有若干个打印机,但只能有一个Printer Spooler,以避免两个打印作业同时输出到打印机中。每台计算机可以有若干通信端口,系统应当集中管理这些通信端口,以避免一个通信端口同时被两个请求同时调用。总之,选择单例模式就是为了避免不一致状态。 4.单例模式的Java代码 单例模式分为懒汉式(需要才去创建对象)和饿汉式(创建类的实例时就去创建对象)。 5.饿汉式 属性实例化对象 //饿汉模式:线程安全,耗费资源。 public class HugerSingletonTest { //该对象的引用不可修改 private static final HugerSingletonTest ourInstance = new HugerSingletonTest(); public static HugerSingletonTest getInstance() {

设计模式-简单工厂模式[JAVA版]

随声附和 提交于 2019-11-27 10:36:33
2016年苹果春季发布会发布了一款迄今最高性能的4英寸iPhone,那么问题来了,苹果公司的代工厂到底生产多少种尺寸的手机呢? 下面就让简单工厂告诉我们答案吧。 由工厂决定生产哪种型号的的手机,苹果公司的工厂就是一个工厂类,是简单工厂模式的核心类。 iPhone5、iPhone5S、iphone6都是苹果手机,只是型号不同。苹果手机类满足抽象的定义,各个型号的手机类是其具体实现。 简单工厂模式的UML如下: 简单工厂模式的实现 首先创建一个"苹果手机"类,定义一个获取手机尺寸的方法 /** * 苹果手机 * @author songwz * */ public abstract class ApplePhone { /** * 获取尺寸 */ protected abstract void getSize(); } 苹果手机不同型号的"手机类"。 /** * Iphone4 * @author songwz * */ public class Iphone4 extends ApplePhone{ @Override public void getSize () { System. out .println( "iPhone4 屏幕 :3.5 英寸 " ); } } /** * iPhone5 * @author gt780 * */ public class Iphone5

简单工厂设计模式

痞子三分冷 提交于 2019-11-27 09:58:08
* A:简单工厂模式概述 * 又叫静态工厂方法模式,它定义一个具体的工厂类负责创建一些类的实例 * B:优点 * 客户端不需要在负责对象的创建,从而明确了各个类的职责 * C:缺点 * 这个静态工厂类负责所有对象的创建,如果有新的对象增加,或者某些对象的创建方式不同,就需要不断的修改工厂类,不利于后期的维护 * D:案例演示 * 动物抽象类:public abstract Animal { public abstract void eat(); } * 具体狗类:public class Dog extends Animal {} * 具体猫类:public class Cat extends Animal {} * 开始,在测试类中每个具体的内容自己创建对象,但是,创建对象的工作如果比较麻烦,就需要有人专门做这个事情,所以就知道了一个专门的类来创建对象。 * public class AnimalFactory { private AnimalFactory(){} //public static Dog createDog() {return new Dog();} //public static Cat createCat() {return new Cat();} //改进 public static Animal createAnimal(String

设计模式

﹥>﹥吖頭↗ 提交于 2019-11-27 08:11:48
1.工厂模式 第一种:申明一个接口,提供一个test()方法,创建两个实现类,实现test()方法,创建一个工厂类,工厂类提供一个创建方法create(type),该方法返回值设置为接ko口,根据传入的type,判断该返回哪种具体的实现类。 第二种:改进后写法:申明一个接口,提供test()方法,创建两个实现类,实现test()方法,创建一个工厂类,提供两个方法,一个方法创建第一个实现类,第二个方法创建第二个实现类,接口类型,这两个方法的返回类型是测试的时候,工厂类主动调用其中一个方法,然后创建对象,Send send = new SmsSendImpl();然后调用SmsSendImpl中的test()方法 2.单例模式(特点,一个类只需要创建一次,构造器为私有构造器) 第一种:单线程 ,创建一个Single类,静态变量private static Single single = new Single();提供getInstance()方法,返回类型为Single; 第二种:单线程 ,创建一个Single类,静态变量private static Single single = null,提供getInstance()方法,if(single == null){single = new Single()}; 第三种:多线程,用synchronized, 锁定该方法。 3.原型模式

java|设计模式详解(最全)

人盡茶涼 提交于 2019-11-27 01:30:25
一、设计模式的分类 总体来说设计模式分为三大类: (1)创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 (2)结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。 (3)行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。 其实还有两类:并发型模式和线程池模式。用一个图片来整体描述一下: 二、设计模式的六大原则 1、开闭原则(Open Close Principle) 开闭原则就是说 对扩展开放,对修改关闭 。在程序需要进行拓展的时候,不能去修改原有的代码,实现一个热插拔的效果。所以一句话概括就是:为了使程序的扩展性好,易于维护和升级。想要达到这样的效果,我们需要使用接口和抽象类,后面的具体设计中我们会提到这点。 2、里氏代换原则(Liskov Substitution Principle) 里氏代换原则(Liskov Substitution Principle LSP)面向对象设计的基本原则之一。 里氏代换原则中说,任何基类可以出现的地方,子类一定可以出现。 LSP是继承复用的基石,只有当衍生类可以替换掉基类,软件单位的功能不受到影响时,基类才能真正被复用,而衍生类也能够在基类的基础上增加新的行为

java|设计模式详解(最全)

和自甴很熟 提交于 2019-11-27 01:25:02
一、设计模式的分类 总体来说设计模式分为三大类: (1)创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 (2)结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。 (3)行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。 其实还有两类:并发型模式和线程池模式。用一个图片来整体描述一下: 二、设计模式的六大原则 1、开闭原则(Open Close Principle) 开闭原则就是说 对扩展开放,对修改关闭 。在程序需要进行拓展的时候,不能去修改原有的代码,实现一个热插拔的效果。所以一句话概括就是:为了使程序的扩展性好,易于维护和升级。想要达到这样的效果,我们需要使用接口和抽象类,后面的具体设计中我们会提到这点。 2、里氏代换原则(Liskov Substitution Principle) 里氏代换原则(Liskov Substitution Principle LSP)面向对象设计的基本原则之一。 里氏代换原则中说,任何基类可以出现的地方,子类一定可以出现。 LSP是继承复用的基石,只有当衍生类可以替换掉基类,软件单位的功能不受到影响时,基类才能真正被复用,而衍生类也能够在基类的基础上增加新的行为