java23种设计模式之九: 抽象工厂方法模式
一.抽象工厂定义
上一讲我们说了一下工厂方法,那么我们如何对工厂进行抽象。
因为工厂是生产产品的,现在我们需要工厂抽象,只生产抽象产品,不生产具体的产品,这同时也体现了java的多态。
现在有2个抽象,一个是抽象工厂,另一个是抽象产品。
下面介绍抽象产品到具体产品:
产品的具体实现可以有多种方式,可以有抽象类去实现抽象产品中共有的方法,另一部分交给子类实现,这样,我们就可以把产品一些公有的属性抽象出来,一些
特有的属性由子类根据自身条件实现,这样就可以有同种功能,不同型号的产品。
下面介绍抽象工厂到具体工厂:
抽象工厂是生产产品的,生产具体哪一款产品我们不得而知,但是我们可以通过前面的具体的产品来判断,生产同种类型的产品地方只能是具体类型工厂了,比如
小米手机工厂只能生产小米手机,苹果手机工厂只生产苹果手机,这样我们就可以有具体的工厂了。下面看2个类型的示例:
//接口
interface Phone{
//打电话
void call();
//发短信
void sendMsg();
//品牌
void brand();
}
//抽象类,只实现部分功能
abstract class AbstractPhone implements Phone{ @Override
public void call() {
System.out.println("手机在打电话...");
}
@Override
public void sendMsg() {
System.out.println("手机在发信息...");
}
}
//具体实现类1:苹果手机
class ApplePhone extends AbstractPhone{ @Override
public void brand() {
System.out.println("苹果手机");
this.call();
this.sendMsg();
} }
//具体实现类2:小米手机
class XiaoMiPhone extends AbstractPhone{ @Override
public void brand() {
System.out.println("小米手机");
this.call();
this.sendMsg();
} }
//抽象工厂:生产手机
interface PhoneFactory{
Phone createPhone();
}
//具体工厂1:生产苹果手机
class ApplePhoneFactory implements PhoneFactory{ @Override
public Phone createPhone() {
return new ApplePhone();
}
}
//具体工厂2:生产小米手机
class XiaoMiFactory implements PhoneFactory{
@Override
public Phone createPhone() {
return new XiaoMiPhone();
}
}
//接口
interface Human{
void getColor();
void talk();
void getSex();
}
//抽象类,只实现部分功能
abstract class AbstractYellowHuman implements Human{
@Override
public void getColor() {
System.out.println("yellow color...");
} @Override
public void talk() {
System.out.println("yellow talk...");
}
}
//具体实现类1:具体实现类会完成父类接口中未完成的方法
class MaleYellowMan extends AbstractYellowHuman{
@Override
public void getSex() {
System.out.println("yellow...male");
}
}
//具体实现类2:具体实现类会完成父类接口中未完成的方法
class FemaleYellowMan extends AbstractYellowHuman{ @Override
public void getSex() {
System.out.println("yellow...female");
}
}
//抽象工厂
interface HumanFactory{
Human createYelloHuman();
} //具体工厂1:创建男性的工厂
class MaleFactory implements HumanFactory{
@Override
public Human createYelloHuman() {
return new MaleYellowMan(); //创建黄种人,男性角色
}
} //具体工厂2:创建女性的工厂
class FemaleFactory implements HumanFactory{
@Override
public Human createYelloHuman() {
return new FemaleYellowMan();
}
}
java23种设计模式之九: 抽象工厂方法模式的更多相关文章
- java23种设计模式(一)工厂方法模式
在说工厂方法模式之前,先了解一下简单工厂模式.工厂方法模式其实是在简单工厂上面做了一些增强. 简单工厂模式:有一个专门的类来生产其他类的实例,生产的这些实例有一个共同父类.这个跟我们的多态有一点像. ...
- Android设计模式——抽象工厂方法模式
1.抽象工厂方法模式:为了创建一组或相互依赖的对象提供一个接口,而不需要指定它们是具体类……无语 2.找个代码看看: 抽象工厂类<成员为接口> /** * 抽象工厂 * */ public ...
- Java设计模式(二) 工厂方法模式
本文介绍了工厂方法模式的概念,优缺点,实现方式,UML类图,并介绍了工厂方法(未)遵循的OOP原则 原创文章.同步自作者个人博客 http://www.jasongj.com/design_patte ...
- java23种设计模式(一)-- 工厂模式、抽象工厂模式和单例模式
一.工厂模式 1.定义统一的接口,并在接口中定义要实现的抽象方法. 2.创建接口的具体实现类,并实现抽象方法. 3.创建一个工厂类,根据传递的参数,生成具体的实现类对象,执行具体的方法. 优点: 1. ...
- 设计模式C#实现(九)——工厂方法模式和简单工厂
工厂方法模式:定义一个用于创建对象的接口,让子类决定实例化哪一个类.Factory Method使一个类的实例化延迟到其子类. 构成: 1.Product工厂方法创建的对象的接口 2.Concrete ...
- Java设计模式从精通到入门五 抽象工厂方法模式
定义 抽象工厂类为创建一组相关和相互依赖的对象提供一组接口,而无需指定一个具体的类. 这里我得把工厂方法模式得定义拿出来做一下比较:定义一个创建对象的接口,由子类决定实例化哪一个类.工厂方法是一个 ...
- Java设计模式学习笔记(三) 工厂方法模式
前言 本篇是设计模式学习笔记的其中一篇文章,如对其他模式有兴趣,可从该地址查找设计模式学习笔记汇总地址 1. 简介 上一篇博客介绍了简单工厂模式,简单工厂模式存在一个很严重的问题: 就是当系统需要引入 ...
- 【python设计模式-创建型】工厂方法模式
工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一.这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式. 在工厂模式中,我们在创建对象时不会对客户端暴露创建逻 ...
- 设计模式C#合集--工厂方法模式
简单工厂,代码: public interface ISpeak { public void Say(); } public class Hello : ISpeak { public void Sa ...
随机推荐
- LibreOJ #6220. sum
二次联通门 : LibreOJ #6220. sum /* LibreOJ #6220. sum 对所有数做一个前缀和 如果某一位模N等于另一位 则他们中间的一段的和一定为N的倍数 自己感悟一下 (M ...
- Centos7.x 安装 Supervisord
[环境] 系统:Centos 7.3 软件:supervisord [安装Supervisord] yum install epel-release yum install -y supervisor ...
- a=(1,)b=(1),c=(“1”) 分别是什么类型的数据
(1,)– tuple; (“1”) – str; (1) – int; >>> (2,)(2,)>>> (2)2>>> ("6&quo ...
- Windows下OpenFOAM开发及使用环境配置指南 (1)【转载】
转载自:http://openfoam.blog.sohu.com/158614863.html *************************************************** ...
- Arts打卡第7周
Algorithm.主要是为了编程训练和学习. 每周至少做一个 leetcode 的算法题(先从Easy开始,然后再Medium,最后才Hard). 进行编程训练,如果不训练你看再多的算法书,你依然不 ...
- 实现一个hoverDelay延迟hover
实现一个hoverDelay延迟hover author: @TiffanysBear 需求背景 经常在页面开发中,需要使用hover事件来触发相应的网络请求或页面DOM元素显示切换,需要考虑的问题就 ...
- Windows平台下Java,tomcat安装与环境配置
问题描述:在Windows下面做Java web相关的项目的时候,Java和tomcat是基础,这里记载一下Java环境的配置以及tomcat的安装和配置. 使用工具:Windows.jdk安装包.t ...
- Hive SQL NVL 相关函数
1.NVL函数 NVL函数的格式如下:NVL(expr1,expr2)含义是:如果oracle第一个参数为空那么显示第二个参数的值,如果第一个参数的值不为空,则显示第一个参数本来的值. NVL(exp ...
- Eclipse自动生成作者、日期注释等功能设置 (转载)
原文地址:http://blog.sina.com.cn/s/blog_4080505a0101guoh.html 在使用Eclipse 编写Java代码时,自动生成的注释信息都是按照预先设置好的格式 ...
- python 了解一点属性的延迟计算
写在前面 本以为百度搜索这类知识的文章应该有很多, 然后我看了前面几篇后,基本上都是类似的内容,我想找些与众不同的博客看下,来拖宽这方面的广度,我就随机点到了第10页,结果第10页的内容基本跟属性的延 ...