Java-马士兵设计模式学习笔记-工厂模式-抽象工厂模式
一、概述
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-马士兵设计模式学习笔记-工厂模式-抽象工厂模式的更多相关文章
- C#设计模式学习笔记:(3)抽象工厂模式
		本笔记摘抄自:https://www.cnblogs.com/PatrickLiu/p/7596897.html,记录一下学习过程以备后续查用. 一.引言 接上一篇C#设计模式学习笔记:简单工厂模式( ... 
- Java-马士兵设计模式学习笔记-总结
		<马士兵设计模式学习>学习了以下模式: 1.装饰者模式(例子:水管工,木工) 2.策略模式(例子:老师用职称比大小.学生用成绩比大小) 3.简单工厂模式(例子:VechileFactory ... 
- Java设计模式学习笔记,二:工厂模式
		工厂模式,主要实现了创建者和调用者的分离. 分类:1.简单工厂模式:2.工厂方法模式:3.抽象工厂模式. 核心:实例化对象时,用工厂方法代替new操作. 一.简单工厂模式 也叫静态工厂模式,工厂类中实 ... 
- C#设计模式学习笔记:(11)享元模式
		本笔记摘抄自:https://www.cnblogs.com/PatrickLiu/p/7792973.html,记录一下学习过程以备后续查用. 一.引言 今天我们要讲结构型设计模式的第六个模式--享 ... 
- C#设计模式学习笔记:(20)职责链模式
		本笔记摘抄自:https://www.cnblogs.com/PatrickLiu/p/8109100.html,记录一下学习过程以备后续查用. 一.引言 今天我们要讲行为型设计模式的第八个模式--职 ... 
- C#设计模式学习笔记:(17)中介者模式
		本笔记摘抄自:https://www.cnblogs.com/PatrickLiu/p/7966240.html,记录一下学习过程以备后续查用. 一.引言 今天我们要讲行为型设计模式的第五个模式--中 ... 
- Java-马士兵设计模式学习笔记-工厂模式-简单工厂
		一.概述 1.目标:要控制任意类型交通工具的生产模式 2.目标有两层意思(1)任意类型 (2)生产模式,所以对应的,要这两个层面上抽象(Movable,VehicleFactory),利用接口,实现多 ... 
- Java-马士兵设计模式学习笔记-工厂模式-用Jdom模拟Spring
		一.概述 1.目标:模拟Spring的Ioc 2.用到的知识点:利用jdom的xpath读取xml文件,反射 二.有如下文件: 1.applicationContext.xml <?xml ve ... 
- Java-马士兵设计模式学习笔记-工厂模式-模拟Spring读取Properties文件
		一.目标:读取properties文件,获得类名来生成对象 二.类 1.Movable.java public interface Movable { void run(); } 2.Car.java ... 
随机推荐
- Spring_学习_00_资源帖
			一.官方文档 1.Spring Framework Documentation 二.参考书籍 1.< Spring实战 (第四版)> 三.参考资料 
- LeetCode OJ:Validate Binary Search Tree(合法的二叉搜索树)
			Given a binary tree, determine if it is a valid binary search tree (BST). Assume a BST is defined as ... 
- BEGIN_MESSAGE_MAP
			宏定义的一种.在BEGIN_MESSAGE_MAP()和END_MESSAGE_MAP()之间添加你的消息响应函数,为每个消息处理函数加入一个入口 简单用法 BEGIN_MESSAGE_MAP(Cpa ... 
- Busybox shell脚本修改密码
			/****************************************************************************** * Busybox shell脚本修改密 ... 
- UVA - 11019 Matrix Matcher (二维字符串哈希)
			给你一个n*m的矩阵,和一个x*y的模式矩阵,求模式矩阵在原矩阵中的出现次数. 看上去是kmp在二维情况下的版本,但单纯的kmp已经无法做到了,所以考虑字符串哈希. 类比一维情况下的哈希算法,利用容斥 ... 
- 非maven项目下载maven的jar
			很多时候我们需要jar,可惜项目不是maven的,但是我们只有一个maven的坐标,那怎么办? 比如: <dependencies> <dependency> <grou ... 
- Excel中函数row和column的特殊应用
			版本:2016,数据来源:我要自学网-曾贤志老师 row在英文中是行,排的意思,在Excel中的作用是返回所引用的行号. column在英文中是列,总队的意思,其作用是返回所引用的列号. 假 ... 
- BZOJ2120:数颜色(分块版)
			浅谈分块:https://www.cnblogs.com/AKMer/p/10369816.html 题目传送门:https://lydsy.com/JudgeOnline/problem.php?i ... 
- TIJ摘要:访问控制权限
			重构的原动力之一:发现有更好的方式去实现相同的功能. OOP需要考虑的基本问题:如何把变动的事物与不变的事物区分开来. 访问控制权限:以供类库开发人员向客户端程序员指明哪些是可用的,哪些是不可用的.访 ... 
- Mysql 关键字-保留字
			ADD ALL ALTER ANALYZE AND AS ASC ASENSITIVE BEFORE BETWEEN BIGINT BINARY BLOB BOTH BY CALL CASCADE C ... 
