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的更多相关文章

  1. 【编程思想】【设计模式】【创建模式creational】抽象工厂模式abstract_factory

    Python版 https://github.com/faif/python-patterns/blob/master/creational/abstract_factory.py #!/usr/bi ...

  2. 23种设计模式之抽象工厂(Abstract Factory Pattern)

    抽象工厂 当想创建一组密不可分的对象时,工厂方法似乎就不够用了 抽象工厂是应对产品族概念的.应对产品族概念而生,增加新的产品线很容易,但是无法增加新的产品.比如,每个汽车公司可能要同时生产轿车.货车. ...

  3. 设计模式之第2章-抽象工厂模式(Java实现)

    设计模式之第2章-抽象工厂模式(Java实现) “上次是我的不对,贿赂作者让我先讲来着,不过老婆大人大人有大量,不与我计较,这次还让我先把上次未讲完的应用场景部分给补充上去,有妻如此,夫复何求.”(说 ...

  4. 设计模式学习之抽象工厂(Abstract Factory,创建型模式)(3)

    假如我们的苹果和香蕉还分为北方的和南方的,那么苹果Apple和香蕉Banana就是抽象类了,所以采集的方法就应该抽象的 第一步: 我们会创建北方的苹果NorthApple类和SourthBanana类 ...

  5. 【java设计模式】之 抽象工厂(Abstract Factory)模式

    1. 女娲的失误 上一节学习了工厂模式,女娲运用了该模式成功创建了三个人种,可是问题来了,她发现没有性别--这失误也忒大了点吧--竟然没有性别,那岂不是--无奈,只好抹掉重来了,于是所有人都被消灭掉了 ...

  6. C#设计模式学习笔记:(3)抽象工厂模式

    本笔记摘抄自:https://www.cnblogs.com/PatrickLiu/p/7596897.html,记录一下学习过程以备后续查用. 一.引言 接上一篇C#设计模式学习笔记:简单工厂模式( ...

  7. 设计模式的征途—3.抽象工厂(Abstract Factory)模式

    上一篇的工厂方法模式引入了工厂等级结构,解决了在原来简单工厂模式中工厂类职责太重的原则,但是由于工厂方法模式的每个工厂只生产一类产品,可能会导致系统中存在大量的工厂类,从而增加系统开销.那么,我们应该 ...

  8. 设计模式的征途—4.抽象工厂(Abstract Factory)模式

    上一篇的工厂方法模式引入了工厂等级结构,解决了在原来简单工厂模式中工厂类职责太重的原则,但是由于工厂方法模式的每个工厂只生产一类产品,可能会导致系统中存在大量的工厂类,从而增加系统开销.那么,我们应该 ...

  9. 《JAVA与模式》之抽象工厂模式

    场景问题 举个生活中常见的例子——组装电脑,我们在组装电脑的时候,通常需要选择一系列的配件,比如CPU.硬盘.内存.主板.电源.机箱等.为讨论使用简单点,只考虑选择CPU和主板的问题. 事实上,在选择 ...

  10. Java 设计模式系列(三)抽象工厂

    Java 设计模式系列(三)抽象工厂 每天用心记录一点点.内容也许不重要,但习惯很重要!

随机推荐

  1. SpringBoot之文件读取

    SpringBoot 寻找启动配置文件规则如下: 当前目录下的 config 目录 当前目录 classpath 下的 config 目录 classpath 下的 root 目录(根路径) 上面的优 ...

  2. 企业级应用TOMCAT

    第1章 Tomcat 1.1 Tomcat简介 Tomcat是一个免开放源代码的Web应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不多的场合下被普遍使用,是开发调试JSP程序的首选,另 ...

  3. npoi导入导出

    NPOI是指构建在POI 3.x版本之上的一个程序,NPOI可以在没有安装Office的情况下对Word或Excel文档进行读写操作. NPOI是一个开源的Java读写Excel.WORD等微软OLE ...

  4. 程序员的自我救赎---1.4.2: 核心框架讲解(BLL&Tool)

    <前言> <目录> (一) Winner2.0 框架基础分析 (二) 短信中心 (三)SSO单点登录 (四)PLSQL报表系统 (五)钱包系统 (六)GPU支付中心 (七)权限 ...

  5. [flask实践] 解决qq邮箱/mysql的相关配置问题

    笔者经过flask web(Miguel著,封面是一条狗)一书的学习,打算实现一个旅游类网站,在此过程中发现,相对于书中的flasky博客程序,需要作出一些改变: 1. 注册邮箱:国内要使用126,q ...

  6. 访问者模式(Visitor)

    访问者模式(Visitor) 访问者模式把数据结构和作用于结构上的操作解耦合,使得操作集合可相对自由地演化.访问者模式适用于数据结构相对稳定算法又易变化的系统.因为访问者模式使得算法操作增加变得容易. ...

  7. P1156 垃圾陷阱

    题目描述 卡门――农夫约翰极其珍视的一条Holsteins奶牛――已经落了到“垃圾井”中.“垃圾井”是农夫们扔垃圾的地方,它的深度为D(2<=D<=100)英尺. 卡门想把垃圾堆起来,等到 ...

  8. 自己动手实现mvc框架

    用过springmvc的可能都知道,要集成springmvc需要在web.xml中加入一个跟随web容器启动的DispatcherServlet,然后由该servlet初始化一些东西,然后所有的web ...

  9. eclipse和myeclipse中将项目发布到tomcat的root目录

    1.在eclipse中,将项目直接部署在tomcat的root目录中,这样便可以直接ip:port访问项目: 项目右键->属性->web project settings 添加之后直接启动 ...

  10. Ubuntu TensorFlow 源码 Android Demo的编译运行

    Ubuntu TensorFlow 源码 Android Demo的编译运行 一. 安装 Android 的SDK和NDK SDK 配置 A:下载 国内下载地址选最新的: SDK: https://d ...