抽象工厂模式

抽象类和接口

倾然丶 夕夏残阳落幕 提交于 2019-11-30 04:22:50
抽象类( abstract class ) 是什么 具有所有类的特性:属性、方法,该类不能建立对象,只能声明指针和引用,用于基础类的接口声明和运行时的多态,只能继承。所以一般都做为父类存在 能干什么 做父类用,让子类继承,抽象类不能被实例化。抽象类是用来被继承的,抽象类的子类必须重写父类的抽象方法,并提供方法体。若没有重写全部的抽象方法,仍为抽象类。 在哪用 抽象类 抽象类:抽象类就是不能使用 new 方法进行实例化的类,即没有具体实例对象的类,抽象类有点类似于“模板”的作用 , 目的是根据其格式来创建和修改新的类,对象不能由抽象类直接创建,只可以通过抽象类派生出新的子类,再由其子类来创建对象,当一个类被声明为抽象类时,要在这个类前面加上修饰符 abstract, 在抽象类中的成员方法可以包括一般方法和抽象方法 抽象方法 抽象方法:抽象方法就是以 abstract 修饰的方法,这种方法只声明返回的数据类型,方法名称和所需要的参数,没有方法体,也就是说抽象方法只需要声明而不需要事先,当一个方法为抽象方法时,意味着这个方法必须被子类的方法所重写,否则其子类的该方法仍然是 abstract 的,而这个子类也必须是抽象的,即声明为 avstract 抽象方法:只有方法的声明,没有方法的实现。以分号结束: abstract int abstractMethod( int 注意:

二.工厂方法模式

£可爱£侵袭症+ 提交于 2019-11-29 14:32:52
🚗工厂方法模式 引言:上一篇写的的是 简单工厂模式 ,简单工厂模式只有三个要素(工厂、抽象产品、具体产品),它没有 工厂接口 ,并且得到产品的方法一般是静态的,所以在工厂实现的扩展性上面较差,可以当作工厂模式的简化版。在简单工厂模式中,当增加一个产品子类的时候,还需要在工厂方法的Switch分支中新增一个判断,只做到了对扩展的开放,并没有做到对修改关闭,而这点在工厂方法模式中得到了一定的克服,作为简单工厂模式的升级版,工厂方法模式更适用于复杂一点的创建方法中。 1.何为工厂方法模式❓ 介绍 ​ 工厂方法模式(FACTORY METHOD)是一种常用的类 创建型设计模式 ,此模式的核心精神是封装类中变化的部分,提取其中个性化善变的部分为独立类,通过 依赖注入 以达到解耦、复用和方便后期维护拓展的目的。它的核心结构有四个角色,分别是抽象工厂、具体工厂、抽象产品、具体产品 。 该模式中包含的角色及其职责:🕺 抽象工厂(Creator)角色: 是工厂方法模式的 核心 ,与应用程序无关。任何在模式中创建的对象的工厂类必须实现这个接口。 具体工厂(Concrete Creator)角色: 这是实现抽象工厂接口的具体工厂类,包含与应用程序密切相关的逻辑,并且受到应用程序调用以创建产品对象。在上图中有两个这样的角色:BulbCreator与TubeCreator。 抽象产品(Product)角色:

Abstract Factory抽象工厂模式

落爺英雄遲暮 提交于 2019-11-29 06:33:20
抽象工厂模式是是用一个超级工厂去创建其他工厂,简单点说就是工厂的父类,属于创建型模式。 目标:提供一个创建一组对象的方法,而无需指定它们具体的类(同工厂方法)。 使用场景:系统的产品有多于一个的产品族,而系统只消费其中某一族的产品。 实现:在一个工厂里聚合多个同类产品。 案例 上一个工厂方法模式的案例是 一家生产电子产品的工厂,可以生产各种电子产品,但是这时候集团还拥有一家生产服装的工厂, 怎么能把这两个工厂给管理起来,其实把公产管理起来这样更加有助于去理解业务中的类的组织管理,不至于混乱不清晰。 namespace DesignPatterns.AbstractFactory { /// <summary> /// 抽象工厂 /// </summary> public abstract class AbstractFactory { public virtual ElectronicProduct GetElectronicProduct(string name) { throw new NullReferenceException(); } public virtual CarProduct GetCarProduct(string name) { throw new NullReferenceException(); } } /// <summary> /// 抽象工厂生成器

《敏捷软件开发──原则、模式与实践》阅读笔记

自闭症网瘾萝莉.ら 提交于 2019-11-29 05:16:23
《敏捷软件开发──原则、模式与实践》阅读笔记 /*--> */ /*--> */ 《敏捷软件开发──原则、模式与实践》阅读笔记 Table of Contents 1. 敏捷开发 1.1. 敏捷联盟宣言 1.2. 敏捷开发的原则 2. 极限编程 3. 设计原则 3.1. 单一职责原则(SRP) 3.2. 开放——封闭原则(OCR) 3.2.1. 遵循开放──封闭原则设计出的模块具有两个主要的特征 3.3. Liskov替换原则(LSP) 3.4. 依赖倒置原则(DIP) 3.5. 接口隔离原则(ISP) 4. 常用设计模式 4.1. Command模式和Active Object 4.1.1. Command模式的优点 4.1.2. Active Object模式 4.2. Template Method模式和Strategy模式:继承和委托 4.2.1. Template Method模式 4.2.2. Strategy模式 4.2.3. 对比 4.3. Facade模式和Mediator模式 4.3.1. facade模式 4.3.2. Mediator模式 4.3.3. 对比 4.4. Singleton模式和Monostate模式 4.4.1. Singleton模式 4.4.2. Monostate模式 4.4.3. 对比 4.5. Null Object模式 4.6.

JavaScript 面向对象编程

℡╲_俬逩灬. 提交于 2019-11-29 05:01:59
面向对象介绍 什么是对象 Everything is object (万物皆对象) 对象到底是什么,我们可以从两次层次来理解。 (1) 对象是单个事物的抽象。 一本书、一辆汽车、一个人都可以是对象,一个数据库、一张网页、一个与远程服务器的连接也可以是对象。当实物被抽象成对象,实物之间的关系就变成了对象之间的关系,从而就可以模拟现实情况,针对对象进行编程。 (2) 对象是一个容器,封装了属性(property)和方法(method)。 属性是对象的状态,方法是对象的行为(完成某种任务)。比如,我们可以把动物抽象为animal对象,使用“属性”记录具体是那一种动物,使用“方法”表示动物的某种行为(奔跑、捕猎、休息等等)。 在实际开发中,对象是一个抽象的概念,可以将其简单理解为:数据集或功能集。 ECMAScript-262 把对象定义为:无序属性的集合,其属性可以包含基本值、对象或者函数。 严格来讲,这就相当于说对象是一组没有特定顺序的值。对象的每个属性或方法都有一个名字,而每个名字都 映射到一个值。 <p class="tip"> 提示:每个对象都是基于一个引用类型创建的,这些类型可以是系统内置的原生类型,也可以是开发人员自定义的类型。 </p> 什么是面向对象 面向对象不是新的东西,它只是过程式代码的一种高度封装,目的在于提高代码的开发效率和可维护性。 面向对象编程 ——

[design pattern](6) Absract Factory

点点圈 提交于 2019-11-28 22:45:48
前言 在前面的章节中,我们先后介绍了简单工厂模式和工厂方法模式。他们都是工厂模式大家族的一员,那么,本章将会接着上一章,来说一说工厂模式的最后一员,那就是抽象工厂模式。 思考题 首先,来思考下下面的问题怎么实现: 在工厂方法模式中,博主在四川和上海开了一家饭店,目前生意相当的火爆,但是还是不赚钱。分析原因发现,目前各家分店都是自己采购原料,并且很贵。那博主就不愿意了,博主决定,自己开一家生产原料的工厂。那么我们应该去实现这个工厂呢? 要是学习了 抽象工厂模式 ,你就会很惊喜的发现,那家伙可以很好的满足我们的需求。 抽象工厂模式 定义:抽象工厂模式就是在抽象工厂中提供一系列的接口,用这一系列的接口创建相关或者依赖对象的家族,而不需要指定具体的类。 类图: 上面的类图,涉及以下几个角色: 抽象产品A,B:为产品A,B定义了一些接口。 具体产品A,B:抽象产品A,B的具体实现。 抽象工厂:定义了一些列的接口,用于创建具体的产品A,B。 具体工厂:实现了抽象工厂的一系列接口,可以生产一些相关的产品。 思考题实现 首先,定义抽象产品: Salt.java: public interface Salt { String put(); } 然后,定义抽象产品的实现: ShangHaiSalt.java: public class ShangHaiSalt implements Salt {

建造者模式—通俗易懂解析设计模式

人盡茶涼 提交于 2019-11-28 19:18:58
前言   在本篇文章中,我们重点介绍建造者模式 ( Builder Pattern ), 建造者模式顾名思义,与建造创建相关。事实也是如此建造者模式也是创建型中的一种。在我们平常生活中会有比较复杂的东西的组成过程。比如电脑组成、手机组成、电视组成、等等。就拿电脑组成来说。可以由主板、Cpu、显卡等等组成。但是组成的算法步骤是一样的。只是不同的东西组装起来结果不一样而已。 建造者模式介绍 一、 来由   在软件编程的过程我们是否也会遇到类似电脑组装这类的问题呢?当然是会的。组装一个电脑我们就一次,那岂不是要累死了。类似于这种组装算法固定但是各个部分又不稳定经常变化的情况。并且对象组装较为复杂。为了面对解决这种情况。所以有建造者模式。建造者模式到底是如何解决问题的呢?我们一起看看吧。 二、 意图   将一个复杂对象的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。 三、 案例图 四、 建造者模式代码示例   在建造者模式中一般包含如下成分: 抽象建造者: 抽象建造者为创建复杂产品对象的各个部分指定抽象创建接口 具体建造者: 继承抽象建造者,实现抽象创建接口。指定创建的类型。创建各个具体的部分。 产品角色: 复杂产品对象,将各个部分组成产品的接口 指挥者: 调用各个部分,按固定的算法创建。不涉及到具体产品类的信息。仅负责各个部分完整的创建 就组装电脑来说

设计模式

﹥>﹥吖頭↗ 提交于 2019-11-28 18:09:19
知识点三: 抽象工厂模式 一、概述 抽象工厂模式(Abstract Factory Pattern) 是基于 工厂方法模式 的一个延伸,是所有形态的工厂模式中最为抽象和最具一般性的一种形态。它属于23种GOF设计模式的 创建型设计模式 。 抽象工厂模式是指当有多个抽象角色时,使用的一种工厂模式。抽象工厂模式可以向客户端提供一个接口,使客户端在不必指定产品的具体的情况下,创建多个产品族中的产品对象。根据 里氏替换原则 ,任何接受父类型的地方,都应当能够接受子类型。因此,实际上系统所需要的,仅仅是类型与这些抽象产品角色相同的一些实例,而不是这些抽象产品的实例。简单的说就是: 围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 在抽象工厂模式中,接口是负责创建一个相关对象的工厂,不需要显式指定它们的类。每个生成的工厂都能按照工厂模式提供对象。 定义: 提供一个创建一系列相关或互相依赖对象的接口,而无需指定它们具体的类。 在学习抽象工厂模式之前,最好先熟悉一下 简单工厂模式 以及 工厂方法模式 ,这样对理解抽象工厂模式会有一定帮助,而且抽象工厂也是基于工厂方法模式的。 二、优缺点及使用场景 优点: 当一个产品族中的多个对象被设计成一起工作时,它能保证客户端始终只使用同一个产品族中的对象。 缺点:

抽象工厂模式4(6)

这一生的挚爱 提交于 2019-11-28 17:59:26
简单理解:工厂A即可生产产品A也可生产产品B... 超能的工厂,既可以生产肥皂又可以生产洗衣服。。。 package Creating.pratice; public class AbstractFactoryM { public static void main(String[] args) { Animal animal = new AFactoryP().newAnimal(); animal.showAnimal(); Fruit fruit = new AFactoryP().newFruit(); fruit.showFruit(); } } interface AbstractFactoryP{ public Animal newAnimal(); public Fruit newFruit(); } class Animal{ public void showAnimal(){ System.out.println("动物出来了!"); } } class Fruit{ public void showFruit(){ System.out.println("水果熟了!"); } } class AFactoryP implements AbstractFactoryP{ @Override public Animal newAnimal() { return

简单架构:反射实现抽象工厂+IDAL接口完全独立DAL

我的未来我决定 提交于 2019-11-28 15:49:07
一、普通架构中存在的问题 StudentDB数据库,包含一张StudentInfoTB表,结构如下: s_id int primary key identity(1,1), s_name Nvarchar(10) not null, s_age int check(s_age >10 and s_age<30), s_sex bit not null 先来看一下普通的架构的问题所在: 调用关系: dal层代码只是通过SqlHelper简单的操作一下数据库,就不展示了。 StudentInfo的bll层代码,实例化了一个dal层对象,并且每个方法返回对应的方法: private StudentInfoADODal dal = new StudentInfoADODal(); public List<StudentInfoModel> Select() { return dal.Select(); } public int Update(StudentInfoModel siModel) { return dal.Update(siModel); } public int Delete(int id) { return dal.Delete(id); } public int Add(StudentInfoModel siModel) { return dal.Add(siModel)