【java设计模式】【创建模式Creational Pattern】抽象工厂模式Abstract Factory Pattern
aaarticlea/png;base64,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" alt="" />
package com.tn.pattern; public class Client {
public static void main(String[] args) {
AbstractFactory factory=LinuxFactory.getInstance();
factory.buttonFactory();
factory.textFactory(); factory=WindowsFactory.getInstance();
factory.buttonFactory();
factory.textFactory(); //后期添加一个产品族OtherOs
factory=OtherOsFactory.getInstance();
factory.buttonFactory();
factory.textFactory(); //测试再后期添加的产品等级
factory.radioFactory();
}
}
/**
*
* @author
*有多少产品等级结构,工厂角色就有多少个工厂方法;
*有多少个产品族,就有多少个具体产品。
*本例有Linux和Windows两个产品族,所有两个对应的工厂
*每个产品族有button和text两个对象,所有每个工厂有创建这两个对象的工厂方法
*/
interface AbstractFactory{
Button buttonFactory();
Text textFactory(); //为再后期添加的产品等级Radio添加对应工厂角色的工厂方法
Radio radioFactory();
} class LinuxFactory implements AbstractFactory{
private static LinuxFactory linuxFactory=null;
public static LinuxFactory getInstance(){
if(linuxFactory==null)
linuxFactory=new LinuxFactory();
return linuxFactory;
} private LinuxFactory(){} @Override
public Button buttonFactory(){
return new LinuxButton();
} @Override
public Text textFactory(){
return new LinuxText();
} //为再后期添加的产品等级Radio添加对应具体工厂角色的工厂方法的实现
@Override
public Radio radioFactory() {
return new LinuxRadio();
}
} class WindowsFactory implements AbstractFactory{
private static WindowsFactory windowsFactory=null; public static WindowsFactory getInstance(){
if(windowsFactory==null)
windowsFactory=new WindowsFactory();
return windowsFactory;
} private WindowsFactory(){} @Override
public Button buttonFactory() {
return new WindowsButton();
} @Override
public Text textFactory() {
return new WindowsText();
} //为再后期添加的产品等级Radio添加对应具体工厂角色的工厂方法的实现
@Override
public Radio radioFactory() {
return new WindowsRadio();
}
} //后期添加一个产品族:OtherOs
class OtherOsFactory implements AbstractFactory{
private static OtherOsFactory otherOsFactory=null; public static OtherOsFactory getInstance(){
if(otherOsFactory==null)
otherOsFactory=new OtherOsFactory();
return otherOsFactory;
} private OtherOsFactory(){} @Override
public Button buttonFactory() {
return new OtherOsButton();
} @Override
public Text textFactory() {
return new OtherOsText();
} //为再后期添加的产品等级Radio添加对应具体工厂角色的工厂方法的实现
@Override
public Radio radioFactory() {
return new OtherOsRadio();
}
} interface Button{} class LinuxButton implements Button{
public LinuxButton(){
System.out.println("LinuxButton.LinuxButton()");
}
} class WindowsButton implements Button{
public WindowsButton(){
System.out.println("WindowsButton.WindowsButton()");
}
} //后期添加一个产品族OtherOs对应的产品Button
class OtherOsButton implements Button{
public OtherOsButton(){
System.out.println("OtherOsButton.OtherOsButton()");
}
} interface Text{} class LinuxText implements Text{
public LinuxText(){
System.out.println("LinuxText.LinuxText()");
}
} class WindowsText implements Text{
public WindowsText(){
System.out.println("WindowsText.WindowsText()");
}
} //后期添加一个产品族OtherOs对应的产品Text
class OtherOsText implements Text{
public OtherOsText(){
System.out.println("OtherOsText.OtherOsText()");
}
} //再后期添加一个产品等级:Radio
interface Radio{} //为再后期添加的产品等级Radio添加对应产品族产品
class LinuxRadio implements Radio{
public LinuxRadio(){
System.out.println("LinuxRadio.LinuxRadio()");
}
} //为再后期添加的产品等级Radio添加对应产品族产品
class WindowsRadio implements Radio{
public WindowsRadio(){
System.out.println("WindowsRadio.WindowsRadio()");
}
} //为再后期添加的产品等级Radio添加对应产品族产品
class OtherOsRadio implements Radio{
public OtherOsRadio(){
System.out.println("OtherOsRadio.OtherOsRadio()");
}
}
【java设计模式】【创建模式Creational Pattern】抽象工厂模式Abstract Factory Pattern的更多相关文章
- 【编程思想】【设计模式】【创建模式creational】抽象工厂模式abstract_factory
Python版 https://github.com/faif/python-patterns/blob/master/creational/abstract_factory.py #!/usr/bi ...
- 23种设计模式之抽象工厂(Abstract Factory Pattern)
抽象工厂 当想创建一组密不可分的对象时,工厂方法似乎就不够用了 抽象工厂是应对产品族概念的.应对产品族概念而生,增加新的产品线很容易,但是无法增加新的产品.比如,每个汽车公司可能要同时生产轿车.货车. ...
- 设计模式之第2章-抽象工厂模式(Java实现)
设计模式之第2章-抽象工厂模式(Java实现) “上次是我的不对,贿赂作者让我先讲来着,不过老婆大人大人有大量,不与我计较,这次还让我先把上次未讲完的应用场景部分给补充上去,有妻如此,夫复何求.”(说 ...
- 设计模式学习之抽象工厂(Abstract Factory,创建型模式)(3)
假如我们的苹果和香蕉还分为北方的和南方的,那么苹果Apple和香蕉Banana就是抽象类了,所以采集的方法就应该抽象的 第一步: 我们会创建北方的苹果NorthApple类和SourthBanana类 ...
- 【java设计模式】之 抽象工厂(Abstract Factory)模式
1. 女娲的失误 上一节学习了工厂模式,女娲运用了该模式成功创建了三个人种,可是问题来了,她发现没有性别--这失误也忒大了点吧--竟然没有性别,那岂不是--无奈,只好抹掉重来了,于是所有人都被消灭掉了 ...
- C#设计模式学习笔记:(3)抽象工厂模式
本笔记摘抄自:https://www.cnblogs.com/PatrickLiu/p/7596897.html,记录一下学习过程以备后续查用. 一.引言 接上一篇C#设计模式学习笔记:简单工厂模式( ...
- 设计模式的征途—3.抽象工厂(Abstract Factory)模式
上一篇的工厂方法模式引入了工厂等级结构,解决了在原来简单工厂模式中工厂类职责太重的原则,但是由于工厂方法模式的每个工厂只生产一类产品,可能会导致系统中存在大量的工厂类,从而增加系统开销.那么,我们应该 ...
- 设计模式的征途—4.抽象工厂(Abstract Factory)模式
上一篇的工厂方法模式引入了工厂等级结构,解决了在原来简单工厂模式中工厂类职责太重的原则,但是由于工厂方法模式的每个工厂只生产一类产品,可能会导致系统中存在大量的工厂类,从而增加系统开销.那么,我们应该 ...
- 《JAVA与模式》之抽象工厂模式
场景问题 举个生活中常见的例子——组装电脑,我们在组装电脑的时候,通常需要选择一系列的配件,比如CPU.硬盘.内存.主板.电源.机箱等.为讨论使用简单点,只考虑选择CPU和主板的问题. 事实上,在选择 ...
- Java 设计模式系列(三)抽象工厂
Java 设计模式系列(三)抽象工厂 每天用心记录一点点.内容也许不重要,但习惯很重要!
随机推荐
- python实战===如何优雅的打飞机
这是一个打飞机的游戏,结构如下: 其中images中包含的素材为 命名为alien.png 命名为ship.png 游戏效果运行是这样的: 敌军,也就是体型稍微大点的,在上方左右移动,并且有规律 ...
- 《java.util.concurrent 包源码阅读》07 LinkedBlockingQueue
这篇文章来说说稍微复杂一些的LinkedBlockingQueue.LinkedBlockingQueue使用一个链表来实现,会有一个head和tail分别指向队列的开始和队列的结尾.因此Linked ...
- SQL---索引---创建索引
CREATE INDEX 语句用于在表中创建索引. 在不读取整个表的情况下,索引使数据库应用程序可以更快地查找数据. 索引 您可以在表中创建索引,以便更加快速高效地查询数据. 用户无法看到索引,它们只 ...
- 苹果快速的修复了Mac OS High Sierra 上出现了root的漏洞
最近苹果因为Mac最新系统 Mac OS High Sierra 上出现了root的漏洞走上了风口浪尖,不过还好,在一封苹果给科技媒体'9to5 Mac'的回复中得知,苹果在接收到报告之后,立即展开修 ...
- spark2.2 DataFrame的一些算子操作
Spark Session中的DataFrame类似于一张关系型数据表.在关系型数据库中对单表或进行的查询操作,在DataFrame中都可以通过调用其API接口来实现.可以参考,Scala提供的Dat ...
- python语言 第一个程序
print("hello word!") # for i in range(1, 10):# for j in range(1, 10):# print(j, "x&qu ...
- pku夏令营面试
北大面试题目: 一.内存交换 内存交换(对换)的基本思想是,把处于等待状态(或在CPU调度原则下被剥夺运行权利) 的程序从内存移到辅存,把内存空间腾出来,这一过程又叫换出:把准备好竞争CPU运行的程序 ...
- 在windows下vs使用pthread
首先从http://sourceware.org/pthreads-win32/下载pthread 的windows安装包,我下的是pthread-w32-2-9-1-release.zip,其他版本 ...
- 集合、增强for、泛型
Collection集合:Collection是层次结构中的根接口,存储的元素为对象,(也就是说只能存储引用数据类型,不能存储基础数据类型),具体可查询API.集合与数组的区别:1.集合只能存放引用数 ...
- 实际应用中遇到TimedRotatingFileHandler不滚动的问题
需求: 程序每天晚上8点和10点定时运行,期望日志按日期记录 添加Handler部分代码如下: formatter = logging.Formatter("%(asctime)s %(fi ...