抽象工厂模式

【Java基础07】抽象类、接口

廉价感情. 提交于 2020-02-05 12:19:07
1 抽象类 1.1 抽象 abstract 抽象是将一类对象的共同特征总结出来构造类的过程,包括数据抽象和行为抽象两方面。抽象只关注对象有什么样的属性和行为,并不关注这些行为的细节是什么。 1.2 抽象方法和抽象类 抽象方法和抽象类必须使用abstract修饰符来定义,有抽象方法的类只能被定义成抽象类,抽象类里可以没有抽象方法。 抽象方法和抽象类的规则如下。 1.抽象类必须使用abstract修饰符来修饰,抽象方法也必须使用abstract 修饰符来修饰,抽象方法不能有方法体。 2.抽象类不能被实例化,无法使用new关键字来调用抽象类的构造器创建抽象类的实例。即使抽象类里不包含抽象方法,这个抽象类也不能创建实例。 3.抽象类可以包含成员变量、方法(普通方法和抽象方法都可以)、构造器、初始化块、内部类(接口、枚举) 5种成分。抽象类的构造器不能用于创建实例,主要是用于被其子类调用。 4.含有抽象方法的类(包括直接定义了一个抽象方法;或继承了一个抽象父类,但没有完全实现父类包含的抽象方法;或实现了一个接口,但没有完全实现接口包含的抽象方法三种情况)只能被定义成抽象类。 定义抽象方法只需在普通方法上增加abstract修饰符,并把普通方法的方法体全部去掉,方法后增加分号。 定义抽象类只需在普通类上增加abstract修饰符即可。一个普通类(不包含抽象方法的类

DIP介绍和讨论

大城市里の小女人 提交于 2020-02-03 14:24:43
一、DIP定义 定义:DIP(DIP-Dependency Inversion Principle),即依赖倒置原则 1、高层模块不应该依赖于低层模块,二者都应该依赖于抽象。[1] 2、抽象不应该依赖于细节,细节应该依赖于抽象,要针对接口编程,不要针对实现编程。 依赖:在程序设计中,如果一个模块a使用/调用了另一个模块b,我们称模块a依赖模块b。 高层模块与低层模块:往往在一个应用程序中,我们有一些低层次的类,这些类实现了一些基本的或初级的操作,我们称之为低层模块;另外有一些高层次的类,这些类封装了某些复杂的逻辑,并且依赖于低层次的类,这些类我们称之为高层模块。[5] 高层模块包含了一个应该程序中的重要的策略选择和业务模型,正是这些高层模块才使得其所有的应用程序区别于其他,如果高层依赖于低层,那么对低层模块的改动就会直接影响到高层模块,从而迫使它们依次做出改动。 具体原则是: 1) 任何变量都不能拥有一个具体类的指针或者引用。 2)任何类都不应该从具体类派生。 3)任何方法都不应该覆写基类中已经实现的方法。 也就是说应当使用接口和抽象类进行变量类型声明、参数类型声明、方法返还类型说明,以及数据类型的转换等,而不要用具体类进行变量的类型声明、参数类型声明、方法返还类型说明,以及数据类型的转换等。要保证做到这一点,一个具体类应当只实现接口和抽象类中声明过的方法,而不要给出多余的方法。

面向对象知识点总结

喜夏-厌秋 提交于 2020-02-02 19:32:35
第一章复杂性 1.软件复杂性的原因: 问题域的复杂的性; 管理费用开发过程的困难性 软件中随处可能出现的灵活性 描述离散系统行为困难。 2.控制系统复杂性的方法: 分解方法(算法分析和面向对象分解)、抽象的方法 3.复杂系统一般具有如下属性: 层次结构:复杂系统的架构是它所有的组件以及这些组件之间的层次结构的函数。 相对本原(primitives):组成系统的基础组件决定于观察者 分离关注:组件内与组件间的联系分离开来。 共同模式:复杂系统具有共同的模式,复用。 稳定的中间形式:随着时间的推移,系统变得稳定,同时为构建更为复杂系统而作为稳定的中间形式,复杂系统变得更加复杂。 第二章面向对象基础 1.面向对象技术的三个特征:(或基本机制) 封装,隐藏内部实现 继承,复用现有代码 多态,改写对象行为 2.面向对象技术的四个特征:(或基本机制) 抽象,分离变与不变 封装,隐藏内部实现 继承,复用现有代码 多态,改写对象行为 3.Java中抽象类与接口的联系与区别 相同点:1)都有未实现的方法;2)都不能用于创建对象(实例);3)一个具体的类继承或实现它们时,需要对未实现的方法提供具体实现。 不同点:1)接口中的方法都是未实现的,而抽象类中可以有实现的方法;2)接口中没有构造函数和属性,但抽象类中有;3)一个类只能继承一个抽象类,但可以实现多个接口。 4

2020-01-29

拜拜、爱过 提交于 2020-01-30 07:31:46
自己的一些面试总结 线程 多线程 线程的创建方式 1.继承Thread类创建线程 2.实现Runnable接口创建线程 3.使用Callable和future创建线程 4.使用线程池例如用Executor框架 线程怎么启动 Thread.start();//开启线程 Thread.run();当普通方法的方式调用 线程的状态(就绪、运行、阻塞、结束) 1.新建状态:当用new操作符创建一个线程时,线程还没有开始运行,此时线程处在新建状态 2.就绪状态:一个新创建的线程并不自动开始运行,要执行线程,必须调用线程start()方法。当线程对象调用start()方法即启动了线程,start()方法创建线程运行的系统资源,并调度线程运行run()方法。当start()方法返回后,线程就处于就绪状态 3.运行状态 当线程获取cpu时间后,他才进入运行状态,真正开始执行run()方法 4,阻塞状态:线程运行过程中,肯峨眉号各种原因进入阻塞状态; sleep方法进入睡眠状态 线程在等待某个触发条件 线程的同步 同步就是发出一个功能调试时,在没有得到结果之前,该调用就不返回或继续执行后续操作。 异步与同步相对,当一个异步过程调用发出后,调用者在没有得到结果之前,就可以继续执行后续操作。 线程、进程的区别 线程和进程都是一个时间段的描述,是cpu工作时间段的描述。 进程的颗粒太大

设计模式:抽象工厂模式(Abstract Factory)

我怕爱的太早我们不能终老 提交于 2020-01-26 05:27:04
在设计原则中有这样一句话“我们应该针对接口编程,而不是正对实现编程”。但是我们还是在一直使用new关键字来创建一个对象,这不就是在针对实现编程么? 针对接口编程,可以隔离掉以后系统可能发生的一大堆改变。入股代码是针对接口而写,那么可以通过多态,它可以与任何新类实现该接口。但是,当代码使用一大堆的具体类时,等于是自找麻烦,因为一旦加入新的具体类,就必须要改变代码。在这里我们希望能够调用一个简单的方法,我传递一个参数过去,就可以返回给我一个相应的具体对象,这个时候我们就可以使用简单工厂模式。 一、基本定义 简单工厂模式又称之为静态工厂方法,属于创建型模式。在简单工厂模式中,可以根据传递的参数不同,返回不同类的实例。简单工厂模式定义了一个类,这个类专门用于创建其他类的实例,这些被创建的类都有一个共同的父类。 二、模式结构 模式结构图如下: 模式分析: Factory:工厂角色。专门用于创建实例类的工厂,提供一个方法,该方法根据传递的参数不同返回不同类的具体实例。 Product:抽象产品角色。为所有产品的父类。 ConcreteProduct:具体的产品角色。 简单工厂模式将对象的创建和对象本身业务处理分离了,可以降低系统的耦合度,使得两者修改起来都相对容易些。当以后实现改变时,只需要修改工厂类即可。 三、简单工厂模式实现 模式场景:在一个披萨店中,要根据不同客户的口味,生产不同的披萨

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

被刻印的时光 ゝ 提交于 2020-01-26 05:04:47
抽象工厂设计模式 1.系统中有多个产品族,而系统一次只可能消费其中一族产品 2.同属于同一个产品族的产品以其使用。 来看看抽象工厂模式的各个角色(和工厂方法的如出一辙): 抽象工厂角色: 这是工厂方法模式的核心,它与应用程序无关。是具体工厂角色必须实现的接口或者必须继承的父类。在java中它由抽象类或者接口来实现。 具体工厂角色:它含有和具体业务逻辑有关的代码。由应用程序调用以创建对应的具体产品的对象。在java中它由具体的类来实现。 抽象产品角色:它是具体产品继承的父类或者是实现的接口。在java中一般有抽象类或者接口来实现。 具体产品角色:具体工厂角色所创建的对象就是此角色的实例。在java中由具体的类来实现。 下面以IE,火狐,谷歌浏览器为模型做简单的说明 (1)抽象产品角色 package abstractFactory; /** * 抽象产品 ChromeDriver * @author Administrator * */ abstract class ChromeDriver { public abstract void openURL(String prmUrl); public abstract String findElement(String prmFindTyp); public abstract void closePage(); } package

抽象工厂模式

大兔子大兔子 提交于 2020-01-26 04:58:13
通用原则:在可能的情况下尽量使用基类的方法 与简单抽象工厂的区别: 1.Factory用于创建一种类型的产品,而AbstractFactory用于创建产品族 抽象工厂的国种角色: 1.抽象工厂(Abstract Factory). 担任这个角色的是工厂方法模式的核心,它是与应用程序无关的。任何在模式中创立对象的工厂类必须实现这个接口,或继承这个类。 2.具体工厂(Concrete Factory). 这个角色直接在客户端的调用下创建产品的实例。这个角色含有选择合适的产品对象的逻辑,而这个逻辑是与应用系统的商业逻辑紧密相关的。 3.抽象产品(Abstract Product). 担任这个角色的类是工厂方法模式所创建的对象的父类,或它们共同拥有的接口。 4.具体产品(Concrete Factory). 抽象工厂模式所创建的任何产品对象都是某一个具体产品类的实例。这是客户端最终需要的东西,其内部一定充满了应用系统的商业逻辑。 抽象工厂模式结构图 以建房子为例,建造不同风格的房子. 中国式的,西方式的... 1.抽象产品 // 抽象产品 public abstract class wall { } public abstract class window { } public abstract class door { } 2.抽象工厂 // 抽象工厂 public abstract

你还在看错误的抽象工厂模式实现案例?

跟風遠走 提交于 2020-01-26 04:50:28
昨天在搜抽象工厂模式时,发现有好几篇博文讲的实现方式和我所认知的有出入,而且还看到某某教程讲的也是错误的还在搜索引擎排第一。 大家讲的简单工厂模式和工厂方法模式都是没问题的,关键到抽象工厂模式就不对了。 先从简单工厂模式和工厂方法模式复习一下,然后再看看错的是咋讲的。已经对抽象工厂模式烂熟于心的请忽略此文。 简单工厂模式: 有个一公共的产品接口,定义一些方法,各个具体的产品类都实现这个接口,然后有一个专门生产产品类实例的类被称作工厂类,专门为客户端生产产品实例,这个工厂的内部实现就是使用switch或ifelse进行逻辑判断实现的,根据客户端传递的参数不同,来决定什么时候创建什么样的具体产品,生产出不同的具体产品返回给客户端。这样,这个工厂类就集成了所有产品的创建逻辑,它变得无所不知,这也让它变成了核心。但这也成为了他的缺点,因为它将所有的逻辑集中放在一个类里,当产品接口有了新的产品实现类,工厂类需要增加代码,判断在什么时候创建该产品,就需要加入新的判断逻辑。 ShoesFactory工厂 public class ShoesFactory{ public static final String NIKE = "NIKE"; public static final String ADIDAS = "ADIDAS"; public static Shoes getShoes

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

自闭症网瘾萝莉.ら 提交于 2020-01-26 04:49:54
  随着科技的不断发展,各种各样的新兴事物都出现在了我们的生活中。当然了,各种机械仿真动物也随之出现了,开始我们只有Animal,现在我们有仿真Animal了,那么仿真动物该怎么叫呢(仿真喵:喵喵喵,仿真狗:汪汪汪。真喵:喵~~~~~~,真dog:汪~汪~汪~)。现在我们抽象仿真动物,并创建仿真动物类: /// <summary> /// 仿真动物 /// </summary> public class SimulationAnimal { public virtual void SimulationCall() { Console.WriteLine("仿真动物叫"); } } /// <summary> /// 仿真Dog /// </summary> public class SimulationDog : SimulationAnimal { public override void SimulationCall() { Console.WriteLine("汪汪汪"); } } /// <summary> /// 仿真Cat /// </summary> public class SimulationCat : SimulationAnimal { public override void SimulationCall() { Console.WriteLine("喵喵喵

抽象工厂模式(JAVA反射)

心已入冬 提交于 2020-01-26 04:46:11
实例代码(JAVA):模式动机 在工厂方法模式中具体工厂负责生产具体的产品,每一个具体工厂对应一种具体产品,工厂方法也具有唯一性,一般情况下,一个具体工厂中只有一个工厂方法或者一组重载的工厂方法。但是有时候我们需要一个工厂可以提供多个产品对象,而不是单一的产品对象。 为了更清晰地理解工厂方法模式,需要先引入两个概念: • 产品等级结构: 产品等级结构即产品的继承结构,如一个抽象类是电视机,其子类有海尔电视机、海信电视机、TCL电视机,则抽象电视机与具体品牌的电视机之间构成了一个产品等级结构,抽象电视机是父类,而具体品牌的电视机是其子类。 • 产品族: 在抽象工厂模式中,产品族是指由同一个工厂生产的,位于不同产品等级结构中的一组产品,如海尔电器工厂生产的海尔电视机、海尔电冰箱,海尔电视机位于电视机产品等级结构中,海尔电冰箱位于电冰箱产品等级结构中。 产品族与产品等级结构示意图: 当系统所提供的工厂所需生产的具体产品并不是一个简单的对象,而是多个位于不同产品等级结构中属于不同类型的具体产品时需要使用抽象工厂模式。 抽象工厂模式是所有形式的工厂模式中最为抽象和最具一般性的一种形态。 抽象工厂模式与工厂方法模式最大的区别在于,工厂方法模式针对的是一个产品等级结构,而抽象工厂模式则需要面对多个产品等级结构,一个工厂等级结构可以负责多个不同产品等级结构中的产品对象的创建