抽象工厂模式,在很多场景下都有应用。
它有以下的优点
1:封装性,每个产品的实现类不是高层模块要关心的,它所要关心 的是接口和抽象类,他不关心对象是如何创建出来,只有工厂类去关心,只要知道工厂类是谁,我们就能得到一个需要的对象。
2:产品家族的约束为非公开状态。而抽象工厂模式针对的是多个产品等级结构。当每个抽象产品都有多于一个的具体子类的时候,工厂角色怎么知道实例化哪一个子类呢?比如每个抽象产品角色都有两个具体产品。抽象工厂模式提供两个具体工厂角色,分别对应于这两个具体产品角色,每一个具体工厂角色只负责某一个产品角色的实例化。每一个具体工厂类只负责创建抽象产品的某一个具体子类的实例。
抽象产品
package com.gengu.抽象工厂;
/**
* 抽象产品
* */
public abstract class Product {
public abstract void dosomething();
}
具体产品类
package com.gengu.抽象工厂;
/**
* 产品A1
* */
public class ProductA1 extends Product{
@Override
public void dosomething() {
System.out.println("这是产品A1");
}
}
package com.gengu.抽象工厂;
/**
* 产品A 2
* */
public class ProductA2 extends Product{
@Override
public void dosomething() {
System.out.println("这是产品A2");
}
}
package com.gengu.抽象工厂;
/**
* 产品B1
* */
public class ProductB1 extends Product{
@Override
public void dosomething() {
System.out.println("这里是产品B1");
}
}
package com.gengu.抽象工厂;
public class ProductB2 extends Product{
@Override
public void dosomething() {
System.out.println("这里是产品B2");
}
}
抽象工厂类
package com.gengu.抽象工厂;
public abstract class Creater {
public abstract Product createProductA();
public abstract Product createProductB();
}
具体工厂类
package com.gengu.抽象工厂;
public class Creater1 extends Creater{
@Override
public Product createProductA() {
return new ProductA1();
}
@Override
public Product createProductB() {
return new ProductB1();
}
}
package com.gengu.抽象工厂;
public class Creater2 extends Creater{
@Override
public Product createProductA() {
return new ProductA2();
}
@Override
public Product createProductB() {
return new ProductB2();
}
}
测试类
package com.gengu.抽象工厂;
public class Client {
public static void main(String[] args) {
Creater create1 = new Creater1();
Product productA1 = create1.createProductA();
productA1.dosomething();
}
}
抽象工厂方法从纵向上看,几乎没有可扩展性,假如我们想增加一个产品C,也就是说产品家族由原来的2个变为3个,程序将会有很大的变动,抽象工厂中就需要增加一个方法。这严重违背了开闭原则。并且抽象类是不喜欢被修改的。
但是从横向上来看,却对扩展性有了很好的支持,如果我们增加一个产品等级3,我们只需要在写一个Create3就可以了,这里又符合了开闭原则,有多少个产品等级就应该有多少个实现工厂类。每增加一个产品等级就相应的增加一个实现工厂类,这里的扩展性又很自然的体现出来了。
所以每个模式都是必须在合适的地方使用的。
分享到:
相关推荐
c++ java 抽象工厂模式
java抽象工厂模式实现热带工厂,生产水果等等。比较简单的一个程序。
本人大四,根据老师要求写的一份抽象工厂模式的例子。你们下载下来导入myclipse中即可使用。其中在测试Test.java中,你们可以看看运行效果
抽象工厂模式的简单实现,代码里面有详细的注释,可供初学者学习,有不懂的地方大家可以相互交流
java抽象工厂模式的实现实例.pdf
JAVA抽象工厂模式--演示代码,抽象工厂模式,也称为工厂的工厂,有一个工厂创建其他工厂
java设计模式之抽象工厂模式,实例----手机工厂,一个简单的例子,有助于理解抽象工厂模式。
抽象工厂模式的代码(java), 详细描述了抽象工厂模式的代码架构.
提供一个创建一系列相关或相互依赖对象的接口,而无需指定他们具体的类。 通过主板和cpu组装电脑。这里主板的CPU插槽数要和CPU的针脚数相等,也就是说CPU对象和主板对象是有关联的,同时CPU种类和主板的种类也有很多...
Java23种设计模式06抽象工厂模式.pdf
抽象工厂模式实现计算器源码,学习C#设计模式。
介绍的是工厂模式 包括简单工厂模式、工厂方法模式、抽象工厂模式 包括PPT和代码
java设计模式 抽象工厂模式详解 一张图让你彻底明白抽象工厂模式
Java实现的工厂模式,抽象工厂,工厂方法模式
JAVA设计模式之抽象工厂模式,一个不错的列子,逻辑比好清晰,让你更好的理解抽象工厂
java 图书展(抽象工厂模式) java 图书展(抽象工厂模式)
1、抽象工厂模式+反射技术 2、抽象工厂模式+简单工厂模式 3、仅仅是抽象工厂模式
java设计模式【之】抽象工厂模式【源码】【场景:制作咖啡】 * 抽象工厂 * * 创建对象实例时,不要直接 new 类, 而是把这个new 类的动作放在一个工厂的方法中,并返回。 * 在工厂方法的基础上,进一步抽象工厂...
java设计模式之抽象工厂模式实例,希望对大家有所帮助。