抽象工厂模式与工厂方法模式的区别
工厂方法模式是一种极端情况的抽象工厂模式,而抽象工厂模式可以看成是工厂方法模式的一种推广。
(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();
}
}
分享到:
相关推荐
抽象工厂模式提供一个接口,用于创建相关或依赖对象的家族,无需指定具体类。 原型模式通过克隆已有对象来创建新对象,避免了复杂的实例化过程。 掌握这些设计模式和原则对于提升软件质量至关重要,它们可以帮助...
本书的主要内容为:优化代码的第一步、开闭原则、里氏替换原则、依赖倒置原则、接口隔离原则、迪米特原则、单例模式、Builder模式、原型模式、工厂方法模式、抽象工厂模式、策略模式、状态模式、责任链模式、解释器...
本书的主要内容为:优化代码的第一步、开闭原则、里氏替换原则、依赖倒置原则、接口隔离原则、迪米特原则、单例模式、Builder模式、原型模式、工厂方法模式、抽象工厂模式、策略模式、状态模式、责任链模式、解释器...
第一天的课程内容主要介绍了解决方案设计理念,包括软件设计方法的比较,MSF(Microsoft Solution Framework)流程概述,以及软件架构设计的基本思想。课程中还提到了微软服务器产品和桌面产品的集成特性,强调了...
- **模式定义**:抽象工厂模式是一种创建型设计模式,它能让用户创建一系列相关或相互依赖的对象,而无需指定其具体类。 2. **BUILDER** - **场景解析**:要追求不同地区的MM,就需要学会说不同语言的“我爱你”...
### Spring培训笔记第一天:深入理解Spring框架的核心概念与实践 #### Spring框架简介 Spring框架是企业级应用开发中广泛使用的轻量级框架,它通过提供一系列的开发模式和最佳实践来简化Java应用的开发过程。...
2. **工厂模式**:提供一个接口用于创建一系列相关或相互依赖的对象,而无需指定它们的具体类。C#中的抽象工厂和简单工厂可以用来动态地创建对象,增加了代码的灵活性。 3. **建造者模式**:将一个复杂对象的构建...
同时,结合工厂模式和反射技术来动态地创建装饰器对象,进一步提高系统的灵活性和可扩展性。 综上所述,通过合理地选择和应用设计模式,可以有效提升软件系统的质量和可维护性,满足不断变化的业务需求。
例如,工厂模式用于创建对象,单例模式保证一个类只有一个实例,观察者模式实现对象间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。 这些面向对象的其他知识点在实际...
第一天:PHP入门 1. PHP简介:了解PHP的历史、特点以及它在Web开发中的作用。 2. 安装环境:安装PHP运行环境,如XAMPP或WAMP,它们包含了Apache服务器、MySQL数据库和PHP。 3. 第一个PHP程序:编写并运行"Hello, ...
同时,设计模式如工厂模式、单例模式、观察者模式等也会被引入,以提升代码的可读性和可维护性。 2. **多线程**:Java对并发处理支持良好,这一阶段会讲解线程的创建、同步、死锁预防,以及如何使用ExecutorService...
"第四阶段第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讲中,主题聚焦于“多态”这一核心概念。多态是面向对象编程中的一个关键特性,它允许不同类型的对象对同一消息作出不同的响应,从而...
将抽象类作为方法的参数和返回值,可以实现更加灵活的设计,比如工厂模式和策略模式中经常用到这种技巧。 4. 抽象类作为方法的参数:这种方法可以确保传入的参数类型是抽象类的某个具体子类,从而利用多态特性,让...
5. **设计模式**:设计模式是解决特定问题的一套可重用的设计方案,例如单例模式、工厂模式等,在实际项目中合理运用设计模式可以提高代码质量和可维护性。 综上所述,《21天学通C++(第四版)》这本书涵盖了从C++...
同时,理解如何利用面向对象设计模式来解决实际问题也是学习的重点,比如工厂模式、单例模式、观察者模式等。 在"python学习,面向对象,第十天"的课程中,你可能已经深入探讨了上述概念,并通过实际编程练习来巩固...
- 课程可能会介绍一些常见的设计模式,如单例模式、工厂模式或装饰器模式,以提高代码的可维护性和可扩展性。 10. **JVM内存模型**: - 讲解Java虚拟机(JVM)的工作原理,包括堆内存、栈内存、方法区等。 以上...
- **创建型模式:** 包括单例模式、工厂模式、抽象工厂模式等。例如,单例模式确保一个类只有一个实例,并提供一个全局访问点。 - **结构型模式:** 包括适配器模式、装饰者模式、代理模式等。例如,适配器模式将一...