抽象工厂模式是所有形态的工厂模式中最为抽象和最具一般性的一种形态。包含以下角色:
抽象工厂(Abstract Factory)角色:担任这个角色的是工厂方法模式的核心,它是与应用系统商业逻辑无关的。
具体工厂(Concrete Factory)角色:这个角色直接在客户端的调用下创建产品的实例。这个角色含有选择合适的产品对象的逻辑,而这个逻辑是与应用系统的商业逻辑紧密相关的。
抽象产品(Abstract Product)角色:担任这个角色的类是工厂方法模式所创建的对象的父类,或它们共同拥有的接口。
具体产品(Concrete Product)角色:抽象工厂模式所创建的任何产品对象都是某一个具体产品类的实例。这是客户端最终需要的东西,其内部一定充满了应用系统的商业逻辑。
package org.jzkangta.factorydemo03;
interface Person{
public void eat();
public void talk();
}
//男人
class Man implements Person{
public void eat(){
System.out.println("男人再吃东西。。。。");
}
public void talk(){
System.out.println("男人在说话。。。。");
}
}
//女人
class Woman implements Person{
public void eat(){
System.out.println("女人再吃东西。。。。");
}
public void talk(){
System.out.println("女人在说话。。。。");
}
}
interface Animal{
public void eat();
public void sleep();
}
//公牛
class Bull implements Animal{
public void eat(){
System.out.println("Bull再吃东西。。。。。");
}
public void sleep(){
System.out.println("Bull睡觉了。。。。");
}
}
//母牛
class Cow implements Animal{
public void eat(){
System.out.println("Cow再吃东西。。。。。");
}
public void sleep(){
System.out.println("Cow睡觉了。。。。");
}
}
//NWFactory-->女娲
interface NWFactory{
public Person getPerson(String type);
public Animal getAnimal(String type);
}
//阳绳-->用来造男人和雄性动物(Bull)
class YangSheng implements NWFactory{
Man m=null;
Bull b=null;
public Man getPerson(String type){
try {
m=(Man)Class.forName("org.jzkangta.factorydemo03."+type).newInstance();
} catch (Exception e) {
e.printStackTrace();
}
return m;
}
public Bull getAnimal(String type){
try {
b=(Bull)Class.forName("org.jzkangta.factorydemo03."+type).newInstance();
} catch (Exception e) {
e.printStackTrace();
}
return b;
}
}
//阴绳-->用来造女人和雌性动物(Cow)
class YinSheng implements NWFactory{
Woman w=null;
Cow c=null;
public Woman getPerson(String type){
try {
w=(Woman)Class.forName("org.jzkangta.factorydemo03."+type).newInstance();
} catch (Exception e) {
e.printStackTrace();
}
return w;
}
public Cow getAnimal(String type){
try {
c=(Cow)Class.forName("org.jzkangta.factorydemo03."+type).newInstance();
} catch (Exception e) {
e.printStackTrace();
}
return c;
}
}
public class FactoryDemo03 {
public static void main(String[] args) {
//实例化一个阳绳,ys
YangSheng ys=new YangSheng();
//实例化一个阴绳,ys1
YinSheng ys1=new YinSheng();
//造男人和女人,p1是男人,p2是女人
Person p1=ys.getPerson("Man");
Person p2=ys1.getPerson("Woman");
//造动物,a1是公牛(Bull),a2是母牛(Cow)
Animal a1=ys.getAnimal("Bull");
Animal a2=ys1.getAnimal("Cow");
a1.eat();
a1.sleep();
a2.eat();
a2.sleep();
p1.eat();
p1.talk();
p2.eat();
p2.talk();
}
}
(注:代码来自jzkangta老师的教程)
分享到:
相关推荐
在这个学习笔记中,我们将深入理解简单工厂模式的概念、工作原理以及如何在实际编程中应用。 简单工厂模式的核心思想是通过一个公共的工厂类来创建不同类型的对象。这个工厂类负责识别客户端请求的对象类型,并返回...
《C++20设计模式》学习笔记-第3章工厂方法和抽象工厂模式学习代码
在Java中,简单工厂、工厂方法和抽象工厂模式可以帮助我们根据不同的条件创建不同类型的对象,降低了代码的耦合度。 三、抽象工厂模式 抽象工厂模式提供了创建相关或依赖对象的家族,而无需指定它们的具体类。它有...
在《深入浅出设计模式》的学习笔记中,我们可以看到几种关键的设计模式及其应用,包括策略模式、观察者模式、装饰者模式、工厂模式和抽象工厂模式。 1. **策略模式**: - 策略模式的核心在于将算法族封装在独立的...
这里我们聚焦于C#语言中的设计模式学习笔记,涵盖了多种经典的设计模式,如合成模式、桥梁模式、装饰模式、享元模式、门面模式、命令模式、工厂方法、策略模式、代理模式以及状态模式。下面将对这些模式逐一进行详细...
3. **抽象工厂模式**:它是工厂模式的升级版,不仅创建对象,还创建对象的家族,保证了一组相关或相互依赖的对象有一致的接口。 4. **建造者模式**:将复杂对象的构建与它的表示分离,使得同样的构建过程可以创建...
### Head First 设计模式学习笔记知识点总结 #### 1. 欢迎来到设计模式世界:设计模式入门 - **业务场景**: - **需求背景**:开发一款模拟鸭子的游戏,游戏内包含多种不同种类的鸭子,每种鸭子具有不同的外观...
《设计模式学习笔记》主要探讨了GOF的23种设计模式以及类设计的基本原则,旨在帮助开发者理解和应用这些经过时间验证的成熟解决方案。设计模式是面向对象软件设计中的核心概念,它们为解决常见的设计问题提供了标准...
在这个“设计模式之美”的学习笔记中,我们将探讨一些主要的设计模式,以及它们在实际开发中的应用。 首先,我们从创建型模式开始。这类模式主要用于对象的创建,如单例模式(Singleton)、工厂模式(Factory ...
以上就是压缩包中的设计模式学习笔记涉及到的主要内容。通过对这些模式的理解和应用,开发者可以更好地解决软件设计中的问题,提升软件的质量和可维护性。每种模式都有其适用场景,理解其背后的意图和应用场景是关键...
普科国际软件学院的学习笔记通常会结合理论与实践,以易于理解的方式解释复杂的概念,并提供实际操作的例子。通过学习这些资料,开发者可以深入理解工厂模式的精髓,掌握如何在实际项目中有效地应用这一模式,提升...
### 设计模式学习笔记 #### 一、简单工厂模式 (Simple Factory) **类图与描述:** 简单工厂模式的核心在于存在一个工厂类,这个工厂类能够根据不同的输入参数返回不同的对象实例。简单工厂模式并不涉及继承关系,...
这两种模式在实际应用中常常与其他模式结合使用,如工厂方法可以演变成抽象工厂模式、生成器模式或原型模式,抽象工厂可以通过简单工厂模式优化,利用反射和配置文件替代条件选择操作。抽象工厂也可以与桥接模式结合...
在这个主题下,我们将深入探讨三种主要的工厂模式:简单工厂、工厂方法和抽象工厂。 1. **简单工厂模式**: 简单工厂模式是最基础的形式,它定义了一个公共接口来创建对象,但让子类决定实例化哪一个类。这种模式...
3. **抽象工厂模式**:为创建一组相关或相互依赖的对象提供一个接口,而无需指定它们的具体类。它用于处理不同平台或环境下的对象创建问题。 4. **建造者模式**:将复杂对象的构建与其表示分离,使得同样的构建过程...
在《设计模式学习笔记之工厂模式.doc》中,可能会详细解析工厂模式的定义、结构、优缺点、适用场景以及具体代码实现。文档可能会通过实例演示如何在实际项目中应用工厂模式,例如创建数据库连接、构建GUI组件等。...
3. **抽象工厂模式**:为创建一组相关或相互依赖的对象提供一个统一的接口,避免了客户程序与具体产品类之间的耦合。 4. **建造者模式**:将复杂对象的构建与其表示分离,使得同样的构建过程可以创建不同的表示。 ...
#### Abstract Factory(抽象工厂)模式 - **定义**:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。 - **实现方式**:定义一个工厂接口,为不同的产品族提供多个工厂方法。 - **特点**: ...
在《23个设计模式图解--学习笔记》中,我们探讨了这些模式,以便于理解和应用到实际开发中。以下是这23个设计模式的详细说明: 1. **工厂方法**(Factory Method):定义一个用于创建对象的接口,让子类决定实例化...
这个压缩包文件包含了23种设计模式的学习笔记和源码,旨在帮助开发者深入理解并熟练运用这些模式。以下是对每种设计模式的详细解释,以及它们在Java编程中的应用。 1. **单例模式**:确保一个类只有一个实例,并...