`
lcwyiyun
  • 浏览: 11872 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

第一天 工厂模式之抽象工厂模式

阅读更多
抽象工厂模式与工厂方法模式的区别
工厂方法模式是一种极端情况的抽象工厂模式,而抽象工厂模式可以看成是工厂方法模式的一种推广。
(1) 工厂方法模式是用来创建一个产品的等级结构的,而抽象工厂模式是用来创建多个产品的等级结构的。工厂方法创建一般只有一个方法,创建一种产品。抽象工厂一般有多个方法,创建一系列产品。
(2) 工厂方法模式只有一个抽象产品类,而抽象工厂模式有多个。工厂方法模式的具体工厂类只能创建一个具体产品类的实例,而抽象工厂模式可以创建多个。

抽象工厂模式的使用情况
1.系统不依赖于产品类实例如何被创建,组合和表达的细节。
2.系统的产品有多于一个的产品族,而系统只消费其中某一族的产品(抽象工厂模式的原始用意
3.同属于同一个产品族是在一起使用的。这一约束必须在系统的设计中体现出来。
4.系统提供一个产品类的库,所有产品以同样的接口出现,从而使客户端不依赖于实现。

示例代码
两个抽象产品角色:
public interface Lion {
	public void eat();
}

public interface Tiger {
	public void eat();
}


四个具体产品角色:
public class ChinaLion implements Lion{
	public void eat() {
		System.out.println("中国狮子吃东西");
	}
}

public class ChinaTiger implements Tiger{
	public void eat() {
		System.out.println("中国老虎吃东西");
	}
}

public class AmericLion implements Lion{
	public void eat() {
		System.out.println("美国狮子吃东西");
	}
}

public class AmericTiger implements Tiger{
	public void eat() {
		System.out.println("美国老虎吃东西");
	}
}


一个抽象工厂角色:
public interface AnimalFactory {
	public abstract Lion getLion();
	public abstract Tiger getTiger();
}


两个具体工厂角色:
public class AmericAnimalFactory implements AnimalFactory{
	public Lion getLion() {
		return new AmericLion();
	}
	public Tiger getTiger() {
		return new AmericTiger();
	}
}

public class ChinaAnimalFactory implements AnimalFactory{
	public Lion getLion() {
		return new ChinaLion();
	}
	public Tiger getTiger() {
		return new ChinaTiger();
	}
}


测试类:
public class Client {
	public static void main(String[] args) {
		AnimalFactory chinaAnimalFactory = new ChinaAnimalFactory();
		Lion chinaLion = chinaAnimalFactory.getLion(); 
		chinaLion.eat();
		Tiger chinaTiger = chinaAnimalFactory.getTiger();
		chinaTiger.eat();
		
		AnimalFactory americAnimalFactory = new AmericAnimalFactory();
		Lion americLion = americAnimalFactory.getLion();
		americLion.eat();
		Tiger americTiger = americAnimalFactory.getTiger();
		americTiger.eat();
	}
}


分享到:
评论

相关推荐

    设计模式第一天学习内容

    抽象工厂模式提供一个接口,用于创建相关或依赖对象的家族,无需指定具体类。 原型模式通过克隆已有对象来创建新对象,避免了复杂的实例化过程。 掌握这些设计模式和原则对于提升软件质量至关重要,它们可以帮助...

    何红辉关爱民-Android源码设计模式解析与实战(带书签第2版).pdf

    本书的主要内容为:优化代码的第一步、开闭原则、里氏替换原则、依赖倒置原则、接口隔离原则、迪米特原则、单例模式、Builder模式、原型模式、工厂方法模式、抽象工厂模式、策略模式、状态模式、责任链模式、解释器...

    何红辉关爱民-Android源码设计模式解析与实战(带书签高清第2版).pdf

    本书的主要内容为:优化代码的第一步、开闭原则、里氏替换原则、依赖倒置原则、接口隔离原则、迪米特原则、单例模式、Builder模式、原型模式、工厂方法模式、抽象工厂模式、策略模式、状态模式、责任链模式、解释器...

    北京中科信软VS.NET设计模式与软件架构设计培训1

    第一天的课程内容主要介绍了解决方案设计理念,包括软件设计方法的比较,MSF(Microsoft Solution Framework)流程概述,以及软件架构设计的基本思想。课程中还提到了微软服务器产品和桌面产品的集成特性,强调了...

    23设计模式简讲

    - **模式定义**:抽象工厂模式是一种创建型设计模式,它能让用户创建一系列相关或相互依赖的对象,而无需指定其具体类。 2. **BUILDER** - **场景解析**:要追求不同地区的MM,就需要学会说不同语言的“我爱你”...

    spring培训笔记第一天

    ### Spring培训笔记第一天:深入理解Spring框架的核心概念与实践 #### Spring框架简介 Spring框架是企业级应用开发中广泛使用的轻量级框架,它通过提供一系列的开发模式和最佳实践来简化Java应用的开发过程。...

    设计模式-可复用面向对象软件的基础

    2. **工厂模式**:提供一个接口用于创建一系列相关或相互依赖的对象,而无需指定它们的具体类。C#中的抽象工厂和简单工厂可以用来动态地创建对象,增加了代码的灵活性。 3. **建造者模式**:将一个复杂对象的构建...

    设计模式例题

    同时,结合工厂模式和反射技术来动态地创建装饰器对象,进一步提高系统的灵活性和可扩展性。 综上所述,通过合理地选择和应用设计模式,可以有效提升软件系统的质量和可维护性,满足不断变化的业务需求。

    13-面向对象-第5天(面向对象其他知识点)-讲义共7页

    例如,工厂模式用于创建对象,单例模式保证一个类只有一个实例,观察者模式实现对象间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。 这些面向对象的其他知识点在实际...

    通过该内容的学习,十天即可学会PHP

    第一天:PHP入门 1. PHP简介:了解PHP的历史、特点以及它在Web开发中的作用。 2. 安装环境:安装PHP运行环境,如XAMPP或WAMP,它们包含了Apache服务器、MySQL数据库和PHP。 3. 第一个PHP程序:编写并运行"Hello, ...

    第四阶段第13天资料.zip

    同时,设计模式如工厂模式、单例模式、观察者模式等也会被引入,以提升代码的可读性和可维护性。 2. **多线程**:Java对并发处理支持良好,这一阶段会讲解线程的创建、同步、死锁预防,以及如何使用ExecutorService...

    第四阶段第16天资料.zip

    "第四阶段第16天资料.zip" 文件很可能是一个教学资源包,专门针对Java学习者,尤其是那些处于进阶阶段,进行项目开发和测试训练的学员。 在Java的第四阶段,学生通常会接触到更为深入的主题,包括但不限于: 1. **...

    软件框架设计的艺术

    17.2.5 第一天的解决方案 310 17.3 第二天 313 17.3.1 我想修正犯下的错误 316 17.3.2 第二天的解决方案 317 17.4 第三天:评判日 320 17.5 也来玩下这个游戏吧 327 第18章 可扩展Visitor模式的...

    VS2010轻松学习C#-从零到深入-天轰穿.NET4趣味编程视频教程_第18讲:多态

    在本节《VS2010轻松学习C# - 从零到深入 - 天轰穿.NET4趣味编程视频教程》的第18讲中,主题聚焦于“多态”这一核心概念。多态是面向对象编程中的一个关键特性,它允许不同类型的对象对同一消息作出不同的响应,从而...

    JavaSE基础入门视频教程33天之(14) part2

    将抽象类作为方法的参数和返回值,可以实现更加灵活的设计,比如工厂模式和策略模式中经常用到这种技巧。 4. 抽象类作为方法的参数:这种方法可以确保传入的参数类型是抽象类的某个具体子类,从而利用多态特性,让...

    21天学通C++(第四版)

    5. **设计模式**:设计模式是解决特定问题的一套可重用的设计方案,例如单例模式、工厂模式等,在实际项目中合理运用设计模式可以提高代码质量和可维护性。 综上所述,《21天学通C++(第四版)》这本书涵盖了从C++...

    python学习,面向对象,第十天

    同时,理解如何利用面向对象设计模式来解决实际问题也是学习的重点,比如工厂模式、单例模式、观察者模式等。 在"python学习,面向对象,第十天"的课程中,你可能已经深入探讨了上述概念,并通过实际编程练习来巩固...

    Java_day05上课资料.zip

    - 课程可能会介绍一些常见的设计模式,如单例模式、工厂模式或装饰器模式,以提高代码的可维护性和可扩展性。 10. **JVM内存模型**: - 讲解Java虚拟机(JVM)的工作原理,包括堆内存、栈内存、方法区等。 以上...

    支付宝Java工程师笔试题

    - **创建型模式:** 包括单例模式、工厂模式、抽象工厂模式等。例如,单例模式确保一个类只有一个实例,并提供一个全局访问点。 - **结构型模式:** 包括适配器模式、装饰者模式、代理模式等。例如,适配器模式将一...

Global site tag (gtag.js) - Google Analytics