实例化

Injector

Deadly 提交于 2020-02-16 08:29:19
依赖注入产生的背景: 随着面向对象分析与设计的发展,一个良好的设计,核心原则之一就是将变化隔离,使得变化部分发生变化时,不变部分不受影响(这也是OCP的目的)。为了做到这一点,要利用面向对象中的多态性,使用多态性后,客户类不再直接依赖服务类,而是依赖于一个抽象的接口,这样,客户类就不能在内部直接实例化具体的服务类。但是,客户类在运作中又客观需要具体的服务类提供服务,因为接口是不能实例化去提供服务的。就产生了“客户类不准实例化具体服务类”和“客户类需要具体服务类”这样一对矛盾。为了解决这个矛盾,开发人员提出了一种模式:客户类定义一个注入点,用于服务类(实现IAttackStrategy的具体类,也包括以后加进来的所有实现IAttackStrategy的新类)的注入,而客户类的客户类(Program,即测试代码)负责根据情况,实例化服务类,注入到客户类中,从而解决了这个矛盾。 依赖注入的正式定义: 依赖注入(Dependency Injection),是这样一个过程:由于某客户类只依赖于服务类的一个接口,而不依赖于具体服务类,所以客户类只定义一个注入点。在程序运行过程中,客户类不直接实例化具体服务类实例,而是客户类的运行上下文环境或专门组件负责实例化服务类,然后将其注入到客户类中,保证客户类的正常运行。 Java依赖注入的好处 一些使用Java依赖注入的好处如下: 关注点分离

Python—初识面向对象

旧街凉风 提交于 2020-02-16 04:40:21
楔子 你现在是一家游戏公司的开发人员,现在需要你开发一款叫做<人狗大战>的游戏,你就思考呀,人狗作战,那至少需要2个角色,一个是人, 一个是狗,且人和狗都有不同的技能,比如人拿棍打狗, 狗可以咬人,怎么描述这种不同的角色和他们的功能呢? 你搜罗了自己掌握的所有技能,写出了下面的代码来描述这两个角色 def person(name,age,sex,job): data = { 'name':name, 'age':age, 'sex':sex, 'job':job } return data def dog(name,dog_type): data = { 'name':name, 'type':dog_type } return data 上面两个方法相当于造了两个模子,游戏里的每个人和每条狗都拥有相同里的属性。游戏开始,你根据一个人或一只狗传入的具体信息来塑造一个具体的人或者狗,怎么生成呢? d1 = dog("李磊","京巴") p1 = person("严帅",36,"F","运维") p2 = person("egon",27,"F","Teacher") 两个角色对象生成了,狗和人还有不同的功能呀,狗会咬人,人会打狗,对不对? 怎么实现呢,。。想到了, 可以每个功能再写一个函数,想执行哪个功能,直接 调用 就可以了,对不? def bark(d): print("dog

单例模式(Singleton Pattern)

你离开我真会死。 提交于 2020-02-15 06:56:15
(三)单例模式(Singleton Pattern) 1.单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。 注意: 1).单例类只能有一个实例。 2).单例类必须自己创建自己的唯一实例。 3).单例类必须给所有的其他对对象提供这一实例。 2.作用:保证一个类仅有一个实例,并提供一个访问它的全局访问点。 3. 应用实例: 1、一个党只能有一个主席。 2、Windows 是多进程多线程的,在操作一个文件的时候,就不可避免地出现多个进程或线程同时操作一个文件的现象,所以所有文件的处理必须通过唯一的实例来进行。 3、一些设备管理器常常设计为单例模式,比如一个电脑有两台打印机,在输出的时候就要处理不能两台打印机打印同一个文件。 优点: 1、在内存里只有一个实例,减少了内存的开销,尤其是频繁的创建和销毁实例(比如管理学院首页页面缓存)。 2、避免对资源的多重占用(比如写文件操作)。 缺点: 没有接口,不能继承,与单一职责原则冲突,一个类应该只关心内部逻辑,而不关心外面怎么样来实例化。 4. 实现 我们将创建一个 SingleObject

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

给你一囗甜甜゛ 提交于 2020-02-15 01:11:28
一、工厂模式主要是为创建对象提供过渡接口,以便将创建对象的具体过程屏蔽隔离起来,达到提高灵活性的目的。 工厂模式在《Java与模式》中分为三类: 1)简单工厂模式(Simple Factory):不利于产生系列产品; 2)工厂方法模式(Factory Method):又称为多形性工厂; 3)抽象工厂模式(Abstract Factory):又称为工具箱,产生产品族,但不利于产生新的产品; 这三种模式从上到下逐步抽象,并且更具一般性。 GOF在《设计模式》一书中将工厂模式分为两类:工厂方法模式(Factory Method)与抽象工厂模式(Abstract Factory)。将简单工厂模式(Simple Factory)看为工厂方法模式的一种特例,两者归为一类。 二、简单工厂模式 简单工厂模式又称 静态工厂方法模式 。重命名上就可以看出这个模式一定很简单。它存在的目的很简单:定义一个用于创建对象的接口。 在简单工厂模式中,一个工厂类处于对产品类实例化调用的中心位置上,它决定那一个产品类应当被实例化, 如同一个交通警察站在来往的车辆流中,决定放行那一个方向的车辆向那一个方向流动一样。 先来看看它的组成: 1) 工厂类角色:这是本模式的核心,含有一定的商业逻辑和判断逻辑。在java中它往往由一个具体类实现。 2) 抽象产品角色:它一般是具体产品继承的父类或者实现的接口

设计模式-工厂三姐妹

陌路散爱 提交于 2020-02-14 00:12:17
首先明确什么是工厂模式: (1) 可以使代码结构清晰,有效地封装变化。在编程中,产品类的实例化有时候是比较复杂和多变的,通过工厂模式,将产品的实例化封装起来,使得调用者根本无需关心产品的实例化过程,只需依赖工厂即可得到自己想要的产品。 (2) 对调用者屏蔽具体的产品类。如果使用工厂模式,调用者只关心产品的接口就可以了,至于具体的实现,调用者根本无需关心。即使变更了具体的实现,对调用者来说没有任何影响。 (3) 降低耦合度。产品类的实例化通常来说是很复杂的,它需要依赖很多的类,而这些类对于调用者来说根本无需知道,如果使用了工厂方法,我们需要做的仅仅是实例化好产品类,然后交给调用者使用。对调用者来说,产品所依赖的类都是透明的。 而且,工厂模式可以分为简单工厂模式、工厂方法模式、抽象工厂模式。下面是对这三种工厂模式的对比和分析。 【简单工厂模式】 1.概念: 从设计模式的类型上来说,简单工厂模式 是属于创建型模式,又叫做静态工厂方法(StaticFactory Method)模式,但不属于23种GDF 设计模式之一。简单工厂 模式是由一个工厂对象决定创建出哪一种产品类的实例。简单工厂模式是工厂模式家族中最简单实用的模式,可以理解为是不同工厂模式的一个特殊实现。简单的说, 简单工厂模式更多的使用了面向对象编程中的多态性,基类的引用可以指向派生类,并且调用派生的方法,即多态性。 2.如图所示

Spring—IOC容器如何实例话Bean

萝らか妹 提交于 2020-02-13 23:27:52
     前言    传统应用程序可以通过new和反射的方式来实例化Bean。而Spring Ioc容器则需要根据配置元数据使用反射机制来创建Bean。在Spring Ioc容器中根据Bean创建Bean实例有以下几种方式。     (1)、使用构造器实例化Bean     (2)、使用静态工厂实例化Bean     (3)、使用实例工厂实例化Bean   一、使用构造器实例化Bean:Spring IoC容器能使用 默认空构造器 也能使用 有参数构造器 两种方式创建Bean。     (a)、使用空构造器进行定义,使用此种方式,class属性指定的类必须有空构造器     (b)、使用有参数构造器进行定义,使用此中方式,可以使用 < constructor-arg > 标签指定构造器参数值,其中index表示位置,value表示常量值,也可以指定引用,指定引用使用ref来引用另一个Bean定义   配置文件:   <!-- 默认构造器 --> <bean name="bean1" class="cn.javass.spring.ioc01.helloword.HelloImpl"></bean> <!-- 有参数构造器 --> <bean name="bean2" class="cn.javass.spring.ioc01.helloword.HelloImpl"> <!--

解决:No qualifying bean found for dependency [com.znkj.util.PageUtil]: expected at least 1 bean which

一个人想着一个人 提交于 2020-02-13 21:52:32
No qualifying bean found for dependency [com.znkj.util.PageUtil]: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)} 错误原因:Autowired无法创建实例化 解决方法:把Autowired改成private(把实例化改成私有化) 来源: CSDN 作者: qq_25591259 链接: https://blog.csdn.net/qq_25591259/article/details/104302682

spring04-----Ioc容器实例化Bean

浪尽此生 提交于 2020-02-13 17:09:00
Spring IoC容器如何实例化Bean呢?传统应用程序可以通过new和反射方式进行实例化Bean。而Spring IoC容器则需 要根据Bean定义里的配置元数据使用反射机制来创建Bean。在Spring IoC容器中根据Bean定义创建Bean主要有以下 几种方式: 一. 使用构造器实例化Bean 这是最简单的方式,Spring IoC容器即能使用默认空构造器也能使用有参数构造器两种方 式创建Bean,如以下方式指定要创建的Bean类型: 1. 使用空构造器进行定义,使用此种方式,class属性指定的类必须有空构造器。 <bean name="bean1" class="cn.javass.spring.chapter2.HelloImpl2"/> 2. 使用有参数构造器进行定义,使用这种方式,可以通过< constructor-arg >标签指定构造器参数值,其中index表示位 置,value表示常量值,也可以指定引用,指定引用使用ref来引用另一个Bean定义,后边会详细介绍: <bean name="bean2" class="cn.javass.spring.chapter2.HelloImpl2"> <!-- 指定构造器参数 --> <constructor-arg index="0" value="Hello Spring!"/> </bean 知道如何配置了

Spring---bean的实例化

ε祈祈猫儿з 提交于 2020-02-13 14:15:50
Spring IoC容器如何实例化Bean呢?传统应用程序可以通过new和反射方式进行实例化Bean。而Spring IoC 容器则需要根据Bean定义里的配置元数据使用反射机制来创建Bean。在Spring IoC 容器中主要有以下几种创建Bean实例的方式: 使用构造器实例化Bean 使用静态工厂方式实例化Bean 使用实例工厂方法实例化Bean 构造器实例化 构造器实例化 Bean 是最简单的方式,Spring IoC容器既能使用默认空构造器也能使用有参数构造器两种方式创建Bean 空构造器实例化:要求java Bean必须要有构造方法 空构造器实例化:   <bean id="helloServiceNoWithArgs" class="com.jike.***.HelloWorldImpl" /> 有参数构造器实例化:   <bean id="helloServiceWithArgs" class="com.jike.***.HelloWorldmpl">     <!-- 指定构造器参数,index指定位置 -->     <constructor-arg index="0" value="Hello Spring!"/>   </bean> 静态工厂实例化 使用静态工厂的方式除了指定必须的class属性,还要指定factory

Bean的实例化--静态工厂

时光毁灭记忆、已成空白 提交于 2020-02-13 08:21:25
1,创建实体类User package com.songyan.demo1; /** * 要创建的对象类 * @author sy * */ public class User { private String name; private int age ; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } } 2,创建生产对象的工厂类 改工厂类必须有一个静态的返回值为“要生产的对象的类型” package com.songyan.staticfactory; import com.songyan.demo1.User; /** * 创建User对象的工厂类 * @author sy * */ public class UserFactory { /** * 该方法必须是static的 * @return 工厂要创建的对像 */ public static User createUser() { return new User(); } } 3,配置bean对象 1 <?xml