之前的3种工厂模式中,核心都是工厂类,一个工厂类承担了所有产品的创建工作,如果产品的树形结构需要扩展,就必须在工厂类中为新增的产品增加创建功能,这显然违背了开闭原则----在扩展时不能够修改原来的代码。
为了解决这个问题,我们可以采用抽象工厂模式,即建立与产品类等级相似的工厂等级结构,为每一个产品都提供一个具体的工厂类。
首先创建一个工厂类的接口,它提供了一个接口方法produce()用来创建一个产品,代码如下:
●抽象工厂模式父类
public interface Farm{
public Animal produce();
}
●创建三个工厂类
//Pig工厂类
public class FarmPig implements Farm{
public Animal produce(){
return new Pig();
}
}
//Chicken工厂类
public class FarmChicken implements Farm{
public Animal produce(){
return new Chicken();
}
}
//Sheep工厂类
public class FarmSheep implements Farm{
public Animal produce(){
return new Sheep();
}
}
这样,我们在需要创建三种产品时,只创建对应产品的工厂类来创建各自的产品对象即可,测试程序如下:
public class FarmTest{
public static void test(int count1,int count2,int count3){
//生产猪
Farm farm1 = new FarmPig();
Animal animal1 = farm1.produce();
//生产鸡
Farm farm2 = new FarmChicken();
Animal animal2 = farm2.produce();
//生产羊
Farm farm3 = new FarmSheep();
Animal animal3 = farm3.produce();
//计算收入
int money1 = animal1.sale()*count1;
int money2 = animal2.sale()*count2;
int money3 = animal3.sale()*count3;
System.out.println("Farm养猪收入:" + money1);
System.out.println("Farm养鸡收入:" + money2);
System.out.println("Farm养羊收入:" + money3);
//计算总收入
int sum = money1 + money2 + money3;
System.out.println("Farm总收入:" + sum);
}
public static void main(String[] args){
FarmTest.test(20,1000,50);
}
}
●何时使用抽象工厂模式
根据以上的扩展讲解可知,抽象工厂适用于产品结构多变或有可能扩展的产品创建中,但实际上,我们大多数的程序都需要给未来的维护留下有扩展的余地,这才符合开闭原则。所以大多数时候,我们都会采用抽象工厂模式。当然这并不表示普通的工厂方法没有适用的场景,如果产品结构比较固定也比较简单,则可以使用,就好比上一节中Swing的工厂BorderFactory所示。
分享到:
相关推荐
Java实现的工厂模式,抽象工厂,工厂方法模式
java设计模式 抽象工厂模式详解 一张图让你彻底明白抽象工厂模式
JAVA设计模式之抽象工厂模式,一个不错的列子,逻辑比好清晰,让你更好的理解抽象工厂
java常用设计模式-抽象工厂模式 抽象工厂模式(Abstract Factory Pattern)是一种创建型设计模式,它通过定义一个创建对象的接口来创建对象,但将具体实现的决定留给子类来决定。在抽象工厂模式中,接口是负责创建...
java设计模式之抽象工厂模式实例,希望对大家有所帮助。
java,设计模式中的一种,抽象工厂设计模式。
Java设计模式,抽象工厂的Demo,具体的思想与实现有很多讲得很好的老师,我是看厉风行老师的视频学的,讲得不错,简单易懂
Java设计模式 抽象工厂模式实现 代码可运行 电器工厂 含类图分析
Java设计模式之抽象工厂模式
java设计模式【之】抽象工厂模式【源码】【场景:制作咖啡】 * 抽象工厂 * * 创建对象实例时,不要直接 new 类, 而是把这个new 类的动作放在一个工厂的方法中,并返回。 * 在工厂方法的基础上,进一步抽象工厂...
java 设计模式 抽象工厂模式,希望对大家理解设计模式有帮助
抽象工厂模式 JAVA设计模式
Java23种设计模式06抽象工厂模式.pdf
java设计模式-创建者模式-简单工厂模式。详细的讲解了什么是抽象工厂模式及应用场景和应用场景的代码事例。及各工厂模式的区别。
一个具体工厂创建一个产品族,一个产品族是不同系列产品的组合,产品的创建的逻辑分在在每个具体工厂类...如果没有应对“多系列对象创建”的需求变化,则没有必要使用抽象工厂模式,这时候使用简单的静态工厂完全可以。
软件体系结构课程的抽象工厂试验报告,是利用了java语言编写的源代码。
Java设计模式之抽象工厂模式
设计模式-抽象工厂模式javademo java小程序
NULL 博文链接:https://f303153041.iteye.com/blog/1679092