一、概述

1.抽象工厂:当情况是需要产生一系列产品,若需更换产品,则要求一系列产品一起换,且要控制一系列产品的产生过程,此时可考虑抽象工厂模式。例:小明装修屋子,把电视、冰箱都替换掉,他这次需要把电视、冰箱换成三星的,下次装修可能要换成海尔的。此时可设计抽象类Telveison及Fridge负责产生产品,抽象工厂AbstractFactory负责产生一系列产品

PS:抽象工厂与普通工厂各自的优缺点:

(1)普通工厂容易在产品维度进行扩展,但产生系列产品时不方便,且易造成工厂类泛滥

(2)抽象工厂增加新产品时,要修改AbstractFactory等多处地方

二、类结构

1.Televison.java

2.Fridge.java

3.SamsumgTelevison.java

4.SamsungFridge.java

5.HaierTevevison.java

6.HaierFridge.java

7.AbstractFactory.java

8.SamsungFactory.java

9.HaierFactory.java

三、代码

1.Televison.java

public abstract class Televison {

	abstract void show();
}

  

2.Fridge.java

public abstract class Fridge {

	abstract void cool();
}

  

3.SamsumgTelevison.java

public class SamsungTelevison extends Televison {

	@Override
public void show(){
System.out.println("SamsungTelevison showing...........");
}
}

  

4.SamsungFridge.java

public class SamsungFridge extends Fridge {

	@Override
void cool() {
System.out.println("SamsungFridge cooling");
} }

  

5.HaierTevevison.java

public class HaierTelevison extends Televison {

	@Override
void show() {
System.out.println("海尔电视 showinng...........");
} }

  

6.HaierFridge.java

public class HaierFridge extends Fridge {

	@Override
void cool() {
System.out.println("海尔冰箱冷却中............");
} }

  

7.AbstractFactory.java

public abstract class AbstractFactory {
abstract Televison createTelevison();
abstract Fridge createFridge();
}

  

8.SamsungFactory.java

public class SamsungFactory extends AbstractFactory {

	@Override
Televison createTelevison() {
return new SamsungTelevison();
} @Override
Fridge createFridge() {
return new SamsungFridge();
} }

  

9.HaierFactory.java

public class HaierFactory extends AbstractFactory {

	@Override
Televison createTelevison() {
return new HaierTelevison();
} @Override
Fridge createFridge() {
return new HaierFridge();
} }

  

10.Test.java

public class Test {

	@org.junit.Test
public void test(){
AbstractFactory factory = new SamsungFactory();
Televison tv = factory.createTelevison();
Fridge fridge = factory.createFridge();
tv.show();
fridge.cool(); System.out.println("======================================="); factory = new HaierFactory();
tv = factory.createTelevison();
fridge = factory.createFridge();
tv.show();
fridge.cool();
}
}

  

运行结果:

Java-马士兵设计模式学习笔记-工厂模式-抽象工厂模式的更多相关文章

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

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

  2. Java-马士兵设计模式学习笔记-总结

    <马士兵设计模式学习>学习了以下模式: 1.装饰者模式(例子:水管工,木工) 2.策略模式(例子:老师用职称比大小.学生用成绩比大小) 3.简单工厂模式(例子:VechileFactory ...

  3. Java设计模式学习笔记,二:工厂模式

    工厂模式,主要实现了创建者和调用者的分离. 分类:1.简单工厂模式:2.工厂方法模式:3.抽象工厂模式. 核心:实例化对象时,用工厂方法代替new操作. 一.简单工厂模式 也叫静态工厂模式,工厂类中实 ...

  4. C#设计模式学习笔记:(11)享元模式

    本笔记摘抄自:https://www.cnblogs.com/PatrickLiu/p/7792973.html,记录一下学习过程以备后续查用. 一.引言 今天我们要讲结构型设计模式的第六个模式--享 ...

  5. C#设计模式学习笔记:(20)职责链模式

    本笔记摘抄自:https://www.cnblogs.com/PatrickLiu/p/8109100.html,记录一下学习过程以备后续查用. 一.引言 今天我们要讲行为型设计模式的第八个模式--职 ...

  6. C#设计模式学习笔记:(17)中介者模式

    本笔记摘抄自:https://www.cnblogs.com/PatrickLiu/p/7966240.html,记录一下学习过程以备后续查用. 一.引言 今天我们要讲行为型设计模式的第五个模式--中 ...

  7. Java-马士兵设计模式学习笔记-工厂模式-简单工厂

    一.概述 1.目标:要控制任意类型交通工具的生产模式 2.目标有两层意思(1)任意类型 (2)生产模式,所以对应的,要这两个层面上抽象(Movable,VehicleFactory),利用接口,实现多 ...

  8. Java-马士兵设计模式学习笔记-工厂模式-用Jdom模拟Spring

    一.概述 1.目标:模拟Spring的Ioc 2.用到的知识点:利用jdom的xpath读取xml文件,反射 二.有如下文件: 1.applicationContext.xml <?xml ve ...

  9. Java-马士兵设计模式学习笔记-工厂模式-模拟Spring读取Properties文件

    一.目标:读取properties文件,获得类名来生成对象 二.类 1.Movable.java public interface Movable { void run(); } 2.Car.java ...

随机推荐

  1. hive_学习_01_hive环境搭建(单机)

    一.前言 本文承接上一篇:hbase_学习_01_HBase环境搭建(单机),主要是搭建 hive 的单机环境 二.环境准备 1.说明 hive 的下载来源有: 官方版本:http://archive ...

  2. java学习笔记 --- IO流小结

    IO流  |--字节流    |--字节输入流     InputStream      int read():一次读取一个字节      int read(byte[] bys):一次读取一个字节数 ...

  3. CodeForces - 13D :Triangles(向量法:问多少个蓝点三角形内部无红点)

    Little Petya likes to draw. He drew N red and M blue points on the plane in such a way that no three ...

  4. Jtable实现

    package database; import java.util.Vector; import javax.swing.table.AbstractTableModel; public class ...

  5. C++中rand()函数的用法

    1.rand()不需要参数,它会返回一个从0到最大随机数的任意整数,最大随机数的大小通常是固定的一个大整数. 2.如果你要产生0~99这100个整数中的一个随机整数,可以表达为:int num = r ...

  6. LOJ 10189 仓库建设 ——斜率优化dp

    题目:https://loj.ac/problem/10189 #include<iostream> #include<cstdio> #include<cstring& ...

  7. 应用层-day01

    主流应用程序体系结构:CS结构.P2P结构. CS结构:客户-服务器体系结构.有一台总是打开的主机称为服务器,它服务来自其他许多称为客户的主机的请求. P2P体系结构:应用程序在不同的主机间链接,被称 ...

  8. Pythonb编码规范

    本编码规范是对知道创宇研发技能表中提供的PythonCodingRule.pdf文档进行凝练和总结出来的结果,感谢知道创宇的Geek精神与分享精神 此规范较为严格,严格规定了编码格式和命名规则,仅适于 ...

  9. PHP类(四)-类的继承

    类的继承就是从已经定义的类中继承数据,也可以重新定义或者加入一些数据. 被继承的类称为父类,基类,超类 继承的类称为子类,派生类 在PHP中只能使用单继承,也就是一个类只能从一个类中继承数据,但是一个 ...

  10. HTML5实用知识点

    本文讲解HTML5实用知识点 新增的表单type Canvas使用 SVG使用 Audio使用 Video使用 网页缓存 文件缓存 后台worker Server-Sent Events 定位 拖放功 ...