工厂类

设计模式一:简单工厂模式

大憨熊 提交于 2020-02-23 15:59:48
概念理解: 1. 解耦 :一般通过增加一些抽象层,来实现 功能提供者和功能使用者 两者的解耦隔离。而如果想要扩展功能即增加功能,只需要添加相应的相应的新的功能类,修改中间的抽象类即可,并不用修改使用者部分的代码。并且功能提供者的代码可以复用。而且使得程序更容易理解。 简单工厂模式介绍 一.什么是简单工厂模式? 简单工厂模式的实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个子类(这些子类继承 自一个父类或接口)的实例。 二.简单工厂模式包含的角色: 1.工厂角色(工厂类): 它负责创建所有的类的内部逻辑。当然工厂类必须能够被外界调用,创建所需要的产品对象。 2.抽象产品角色: 简单工厂模式所创建的所有对象的父类,注意,这里的父类可以是接口也可以是抽象类,它负责描述所有实例所共有的公共接口。 3.具体产品角色:简单工厂所创建的具体实例对象,这些具体的产品往往都拥有共同的父类。 三.简单工厂模式的类图 四.深入分析 1.核心思想: 有一个专门的类来负责创建实例的过程。 2. 优点:工厂类是整个模式的关键所在。它包含必要的判断逻辑,能够根据外界给定的信息,决定究竟应该创建哪个具体类的对象。用户在使用时可以直接根据工厂类去创建所需的实例,而无需了解这些对象是如何创建以及如何组织的。有利于整个软件体系结构的优化。 3.缺点:由于工厂类集中了所有实例的创建逻辑,违反了 高内聚

浅析设计模式

一个人想着一个人 提交于 2020-02-22 00:11:46
  一、什么是设计模式?   设计模式,是一套被反复使用、多数人知晓的、经过分类的、代码设计经验的总结。每一个设计模式系统地命名、解释和评价了面向对象系统中一个重要的和重复出现的设计。   使用设计模式的目的:为了代码可重用性、让代码更容易被他人理解、保证代码可靠性。 设计模式使代码编写真正工程化;设计模式是软件工程的基石脉络,如同大厦的结构一样。   Christopher Alexander对设计模式这样说:“每一个模式描述了一个在我们周围不断重复发生的问题,以及该问题的解决方案的核心。这样你就能一次又一次地使用该方案而不必做重复劳动。”   设计模式四个基本要素: 模式名称; 问题; 解决方案; 效果。   二、对类的回顾   类和对象的三大特性: 封装 继承 多态   关于特性,就不做赘述了。我们先要了解 接口 这个概念。什么是接口?   接口:一种特殊的类,声明了若干方法,要求继承该接口的类必须实现这些方法。   接口就是一种抽象的基类(父类),限制继承它的类必须实现接口中定义的某些方法。   接口的作用:限制继承接口的类的方法的名称及调用方式;隐藏了类的内部实现。   Python中关于接口的两种写法: # 写法一: class InterFace(object): def method(self,arg): raise NotImplementedError #

[导入]关于PHP接口的学习

我与影子孤独终老i 提交于 2020-02-17 18:41:00
最近学习PHP5接口的过程中遇到了困难 ,书中说是实现多重继承的一种方式,但我依然不知道具体该如何实现。在网上查PHP接口的资料很少,就查了java的,其实基本上都差不多。看完《澄清Java(接口与继承)》这篇文章才恍然大悟,原来我一开始理解就有误,所谓的多重继承是指接口继承类,而不是类继承接口。 文章中提到了OO的抽象,正如文章中的那句话——"抽象就是抽去像的部分",很形象,以前想到抽象总是认为很难理解,抽象嘛,哈哈,现在就很容易理解了,这也正是接口和抽象类所要做的事情。 文章中还有很多观点也让我受益匪浅,罗列如下: OO的精髓,我以为,是对对象的抽象。 接口的作用,一言以蔽之,就是标志类的类别(type of class)。把不同类型的类归于不同的接口,可以更好的管理他们。 继承的意义也在于抽象,而不是代码重用。 看完这篇文章,现在基本上理解接口、抽象类、继承该如何应用了。 原文如下: 澄清Java(接口与继承) 计算机学院研二的兄弟与我讨论Java,一见面,几个问题全是关于接口,接口有什么用?为什么要用接口?什么时候该使用接口?很庆幸他们不是问我 Java如何连接SQL Server,或者是如何开发J2EE应用,这类问题有杀伤力,避之则吉。今年计算机学院本科有个毕业设计课题是做J2ME,选这个题目的学生在5月末都 还在苦着脸研究java.util.*这个包,这个这个……唉。

简单的工厂模式

谁说胖子不能爱 提交于 2020-02-17 11:52:49
从今天开始 每天进步一点点。开始了解并学习设计模式,就从简单的工厂模式开始吧.... 简单工厂模式 (Simple Factory):不利于产生系列产品 简单工厂模式又称 静态工厂方法模式 。重命名上就可以看出这个模式一定很简单。它存在的目的很简单:定义一个用于创建对象的接口。 在简单工厂模式中,一个工厂类处于对产品类实例化调用的中心位置上,它决定那一个产品类应当被实例化, 如同一个交通警察站在来往的车辆流中,决定放行那一个方向的车辆向那一个方向流动一样。 先来看看它的组成: 1) 工厂类角色:这是本模式的核心,含有一定的商业逻辑和判断逻辑。在java中它往往由一个具体类实现。 2) 抽象产品角色:它一般是具体产品继承的父类或者实现的接口。在java中由接口或者抽象类来实现。 3) 具体产品角色:工厂类所创建的对象就是此角色的实例。在java中由一个具体类实现。 一句话概括就是    简单工厂模式是由一个具体的类去创建其他类的实例,父类是相同的,父类是具体的。 接下来 就用简单的工厂模式设计一个计算器: 首先 我们先创建一个实体类: 接着就开始创建加减乘除的实体类来继承这个基础的具体父类 然后就开始创建工厂类 最终的运行结果: 这个计算器只需要输入运算符号,工厂就实例化出合适的对象,通过多态,返回父类的方式实现了计算器的结果。 来源: https://www.cnblogs.com

设计模式--工厂模式

蹲街弑〆低调 提交于 2020-02-15 15:50:58
工厂模式 定义:分为简单工厂模式,工厂方法模式和抽象工厂模式,它们都属于设计模式中的创建型模式其主要功能都是帮助我们把对象的实例化部分抽取出来,     目的是降低系统中代码耦合度,并且增强了系统的扩展性。 A. 简单工厂模式 :   优点:在于实现对象的创建和对象的使用分离,将对象的创建交给专门的工厂类负责   缺点:工厂类不够灵活,增加新的具体产品需要修改工厂类的判断逻辑代码,而且产品较多时,工厂方法代码逻辑将会非常复杂。   图解: package com.offcn.designpattern.factorypattern;public class SimpleFactoryPattern { public static void main(String[] args) { Phone phone = SimpleFactory.create("oppo"); phone.getPhoneName(); Phone phone1 = SimpleFactory.create("vivo"); phone1.getPhoneName(); }}interface Phone{ void getPhoneName();}class Oppo implements Phone{ @Override public void getPhoneName() { System.out

实现对象的复用——享元模式(二)

徘徊边缘 提交于 2020-02-15 09:38:52
享元模式结构较为复杂,一般结合工厂模式一起使用,在它的结构图中包含了一个享元工厂类,其结构图如图 14-3 所示: 图 14-3 享元模式结构图 在享元模式结构图中包含如下几个角色: ● Flyweight (抽象享元类):通常是一个接口或抽象类,在抽象享元类中声明了具体享元类公共的方法,这些方法可以向外界提供享元对象的内部数据(内部状态),同时也可以通过这些方法来设置外部数据(外部状态)。 ● ConcreteFlyweight (具体享元类):它实现了抽象享元类,其实例称为享元对象;在具体享元类中为内部状态提供了存储空间。通常我们可以结合单例模式来设计具体享元类,为每一个具体享元类提供唯一的享元对象。 ● UnsharedConcreteFlyweight (非共享具体享元类):并不是所有的抽象享元类的子类都需要被共享,不能被共享的子类可设计为非共享具体享元类;当需要一个非共享具体享元类的对象时可以直接通过实例化创建。 ● FlyweightFactory (享元工厂类):享元工厂类用于创建并管理享元对象,它针对抽象享元类编程,将各种类型的具体享元对象存储在一个享元池中,享元池一般设计为一个存储“键值对”的集合(也可以是其他类型的集合),可以结合工厂模式进行设计;当用户请求一个具体享元对象时,享元工厂提供一个存储在享元池中已创建的实例或者创建一个新的实例(如果不存在的话)

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

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

spring框架如何创建bean实例

╄→尐↘猪︶ㄣ 提交于 2020-02-12 04:27:15
三种方式: 1.通过bean的默认的构造方法实例化bean 配置文件: <bean id="" class="类的全路径"/> 2.通过静态工厂方式创建bean实例 <bean id="" class="工厂类的全路径" factory-method="实例化bean的静态方法"/> 3.通过实例工厂的方式创建bean实例 先创建工厂类的实例 <bean id="" class="实例工厂类的全路径"/> 使用工厂类的实例方法创建bean实例 <bean id="" factory-bean="实例工厂类的实例对象" factory-method="创建实例的方法名"/> bean的常见的属性: id:不包含特殊的符号,根据id值可以获得bean的实例对象 name:一般不使用,功能与id类似,name里面可以包含特殊的符号 class:创建的对象所属类的全路径 scope: bean的作用范围 --singleton:默认值,单例 prototype: 多例 request:将创建的对象放在request域里面 session:将创建的对象放在session域里面 globalSession: 将创建的对象放到globalSession域里面 来源: https://www.cnblogs.com/Auto-passion/p/7237440.html

设计模式 => 简单工厂模式 工厂方法模式 上车

爷,独闯天下 提交于 2020-02-11 12:40:56
创造性设计模式 => 工厂模式 => 工厂方法模式上车 工厂模式的定义: 工厂模式定义创造对象的接口, 但是让子类去真正的实例化, 也就是工厂方法将类的实例化延迟到子类 光看文字可能其实没什么感觉, 那笔者来举个栗子 相信飞机大战这个游戏大家都有玩过, 里面会有很多中不同的飞机, 每个飞机的能力都不太一样但是他们也有相似的地方, 拿到前端中来说如果要我们写一个飞机大战, 我们如何来创建这些飞机呢? // 如果是新手的话, 应该是这样创建 var smallPlane = { color : 'red' , size : 500 , power : 0.5 , blood : 100 , touch : function ( ) { this . blood -= 50 ; if ( this . blood == 0 ) { console . log ( 'game over' ) ; } } } var bigPlane = { color : 'blue' , size : 700 , power : 0.7 , blood : 150 , touch : function ( ) { this . blood -= 50 ; if ( this . blood == 0 ) { console . log ( 'game over' ) ; } } } //