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 ...
随机推荐
- 2017.11.7 Noip2017 考前模拟赛
----------------------------------T1---------------------------------- ——>数学老师的报复 题目描述 11 班数学大佬 Y ...
- 前端武器库之DOM练习
1.模态对话框 <!DOCTYPE html> <html lang="en"> <head> <meta charset="U ...
- 【SPOJ】Longest Common Substring II
[SPOJ]Longest Common Substring II 多个字符串求最长公共子串 还是将一个子串建SAM,其他字符串全部跑一边,记录每个点的最大贡献 由于是所有串,要对每个点每个字符串跑完 ...
- select选中
比如<select class="selector"></select> 1.设置value为“全部“的项选中 复制代码代码如下: $(&quo ...
- Dubbo的SPI是个什么鬼
原文:https://mp.weixin.qq.com/s/bQc_tASkfsojlcd897kLtA # spi 是啥? spi,简单来说,就是 service provider interfac ...
- Android 查看和修改网络mtu
CPU:RK3288 系统:Android 5.1 MTU:通信术语 最大传输单元(Maximum Transmission Unit,MTU)是指一种通信协议的某一层上面所能通过的最大数据包大小(以 ...
- idea JRebel
JRebel 链接:https://pan.baidu.com/s/11LI0RkPtrfEWQENns6cWAA 提取码:ndsu settings -> plugins -> inst ...
- 分享CSS3里box-shadow属性的使用方法,包括内阴影box-shadow:inset
一.box-shadow语法 box-shadow: none | inset(可选值,不设置,为外投影,设置,为内投影) x-offset(阴影水平偏移量,正方向为right) y-offset(阴 ...
- SQL语言Select经典语句
-- 示例数据 Select * From Employee Select * From Department -- 返回工资最高的员工的信息 Select * From Employee where ...
- request cluster ID mismatch
删除了etcd集群所有节点中的--data_dir的内容 [root@node3 ~]# cd /var/lib/etcd/ [root@node3 etcd]# ls member [root@no ...