易学设计模式看书笔记(4) - 抽象工厂模式

 本文内容来自书上,不懂设计模式,只求混个眼熟。
三、抽象工厂模式
1.动物管理系统的例子
public interface Animal{

  public void eat();

}

public class Tiger implements Animal
{
	public void eat(){
		sysout.out.println("老虎会吃");
	};
	public void run(){
		sysout.out.println("老虎会跑");
	};
}

public class Dolphin implements Animal
{
	public void eat(){
		sysout.out.println("海豚会吃");
	};
	public void swim(){
		sysout.out.println("海豚会游泳");
	};
}

下面的和简单工厂模式有区别了。
为了区分亚洲虎和非洲虎,亚洲海豚和非洲海豚,还需要创建四个相应的类:
亚洲虎类和非洲虎类,亚洲海豚和非洲海豚类。
public class AsiaTriger extends Triger
{
	public void run(){
		System.out.println("亚洲老虎在跑");
	}
	public void eat(){
		System.out.println("亚洲老虎吃东西");
	}
}
public class AfricaTriger extends Triger
{
	public void run(){}
	public void eat(){}
}
public class AfricaDolphin extends Dolphin
{

}
public class AfricaDophin extends Dolphin
{

}

然后设计一个只负责定义创建方式的抽象工厂类:

public interface Factory
{
	Triger createTriger();
	Dolphin createDolphin();
}

再设计适合亚洲老虎,亚洲海豚的具体工厂类;

public class AsiaFactory implements Factory
{
	public Triger createTriger(){
	    return new AsiaTriger();
	};
	public Dolphin createDolphin(){
		return new AsiaDolphin();
	};
}

再设计适合非洲老虎,非洲海豚的具体工厂类;

public class AfricaFactory implements Factory
{
	public Triger createTriger(){
	    return new AfricaTriger();
	};
	public Dolphin createDolphin(){
		return new AfricaDolphin();
	};
}

public class Client
{
	public static void main(String[] args)
	{
		Factory factory = new AsiaFactory();
		factory.createTriger();
	}
}

2.抽象工厂模式简介

【定义】:

如果客户端需要创建一些产品结构,而这些产品结构由分别属于

不同的产品类别,则可以使用抽象工厂模式,抽象工厂模式中的

抽象工厂类负责定义创建对象的接口,而这一系列对象的创建工作由实现

抽象工厂类的具体工厂类来完成。

【原理】:

抽象工厂模式主要有四部分组成:抽象工厂类,实现抽象工厂类的

具体实现类、抽象类和实现抽象类的具体实现类。

原理图如下:

【使用时机】:当系统创建一系列相互关联的对象时,就需要时用抽象工厂模式。

3.优缺点:

【优点】:

在抽象工厂模式中,客户端不再需要负责对象的创建,而是把这个责任

交给了具体的工厂类,客户端只负责对对象的调用,明确了各个类的职责。

当一系列相互关联的产品被设计到一个工厂里面后,客户端的调用变得简单,

而且,更换这一列的产品时,只需要更换一个工厂类即可。

【缺点】:

如果有新的产品加进来,则需要修改抽象工厂类的设计,并同时修改实现这个

抽象工厂类的具体实现类,需要额外编写代码,增加了工作量。

易学设计模式看书笔记(4) - 抽象工厂模式

时间: 2024-12-26 14:30:08

易学设计模式看书笔记(4) - 抽象工厂模式的相关文章

易学设计模式看书笔记(2) - 简单工厂模式

本文摘自易学设计模式一书 一.简单工厂模式 1.动物管理系统的例子 public interface Animal{ public void eat(); } public class Tiger implements Animal { public void eat(){ sysout.out.println("老虎会吃"); }; public void run(){ sysout.out.println("老虎会跑"); }; } public class D

易学设计模式看书笔记(3) - 工厂方法模式

二.工厂方法模式 1.动物管理系统的例子 首先,抽象的动物类和具体的动物实现类: public interface Animal{ public void eat(); } public class Tiger implements Animal { public void eat(){ sysout.out.println("老虎会吃"); }; public void run(){ sysout.out.println("老虎会跑"); }; } public

易学设计模式看书笔记(1) - 设计模式的分类

1 创建型模式 单独对对象的创建进行研究,高效的创建对象就是创建型模式讨论的问题.创建型设计模式有6种: 简单工厂模式(simple factory): 工厂方法模式(factory method): 抽象工厂模式(abstract factory): 创建者模式(Builder): 原型模式(Prototype): 单例模式(Singleton). 2 结构型模式 在解决了对象的创建问题之后,对象的组成以及对象之间的依赖关系就成了关注的焦点,因为如何设计对象之间的结构.继承和依赖关系会影响到后

易学设计模式看书笔记(7) - 代理模式

代理模式 1.系统日志记录的例子:给系统中的业务逻辑加上日志 (1):最简单直接的做法 public class Test { private Logger logger = Loger.getLogger(this.getClass().getName()); public void doLgic(String name){ logger.log(name + "开始业务逻辑处理..."); //业务逻辑处理相关程序 System.out.println("业务逻辑处理相关

易学设计模式看书笔记(6) - 创建者模式

四.创建者模式 1.摩托车组装系统 觉得这些例子挺适合入门的,容易理解, 看了之后大概是个什么样子的就有了印象. 摩托车 = 车架 + 车轮 + 轮胎 + 发动机. 首先设计摩托车类以及各零件类: 摩托车类: public interface Motorcycle { void build(); } public class Motorcycle1 implements Motorcycle { void build(){ Sysout.out.println("组装摩托车开始..."

设计模式看书笔记(5) - 三种工厂模式比较

先看三种工厂模式部分主要代码(完整代码在前三篇博客): 简单工厂模式: public class SampleFactory { public static Animal createAnimal(String animalName){ if("Tiger".equals(animalName))){ return new Triger(); }else if("Dolphin".equals(animalName)){ return new Dolphin();

23种设计模式(3):抽象工厂模式

定义:为创建一组相关或相互依赖的对象提供一个接口,并且无需指定他们的详细类. 类型:创建类模式 类图: 抽象工厂模式与工厂方法模式的差别 抽象工厂模式是工厂方法模式的升级版本号,他用来创建一组相关或者相互依赖的对象.他与工厂方法模式的差别就在于,工厂方法模式针对的是一个产品等级结构:而抽象工厂模式则是针对的多个产品等级结构.在编程中,通常一个产品结构,表现为一个接口或者抽象类,也就是说,工厂方法模式提供的全部产品都是衍生自同一个接口或抽象类,而抽象工厂模式所提供的产品则是衍生自不同的接口或抽象类

设计模式那点事读书笔记(2)----抽象工厂模式

抽象工厂模式: 此模式提供了一个接口,用于创建相关或者依赖对象的家族,而不需要指定具体实现类. 解决什么问题: 抽象工厂模式允许客户在使用抽象接口来创建一组相关的产品,客户类和工厂类分开,客户需要任何产品的时候,只需要向工厂请求即可,客户无须修改就可以获得新产品.从而实现客户从具体的产品中解耦. UML: 代码结构: 代码: 定义抽象产品: package com.demo.factory.model; /** * 抽象产品 */ public abstract class AbstractBa

设计模式笔记10: 抽象工厂模式

1.1 定义 提供一个创建一系列相关或相互依赖对象的接口,而无需指定他们具体的类. 1.2 类图 1.3 代码实现 1 using System; 2 using System.Collections.Generic; 3 using System.Configuration; 4 using System.Linq; 5 using System.Reflection; 6 using System.Text; 7 using System.Threading.Tasks; 8 9 names