Java学习笔记---设计模式之抽象工厂模式

时间:2021-11-03 00:18:31

一、引言

       闲时多写写博客,忙时多敲敲代码,充实又有收获,何乐而不为?马上要找工作了,后悔以前太懒惰,积累太少,现在只能奋起追逐。by the way,有好工作的可以求介绍。坐标:杭州、武汉。好了,言归正传,今天的正题是抽象工厂模式。

二、什么叫抽象工厂模式

       提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。

三、抽象工厂的类图

       Java学习笔记---设计模式之抽象工厂模式

四、抽象工厂方式中的角色

        (1)抽象工厂角色:抽象工厂模式的核心,包含对多个产品结构的声明,任何工厂类都必须实现这个接口。

(2)具体工厂角色:具体工厂类是抽象工厂的一个实现,负责实例化某个产品族中的产品对象。

        (3)抽象产品角色:抽象模式所创建的所有对象的父类,它负责描述所有实现共有的公共接口。

        (4)具体产品角色:抽象模式所创建的具体实例对象。

五、举例说明

工程结构:

Java学习笔记---设计模式之抽象工厂模式

Fruit.java

package designModeAbstractFactory;

//抽象产品类
public interface Fruit {

public String getName();

public String getColor();
}
Apple.java

package designModeAbstractFactory;


//具体产品角色类
public class Apple implements Fruit {

@Override
public String getName() {
// TODO Auto-generated method stub
return "Apple";
}

@Override
public String getColor() {
// TODO Auto-generated method stub
return "Red";
}

public void appleDo(){
System.out.println("apple can be eat");
}


}
Orange.java

package designModeAbstractFactory;

//具体产品类
public class Orange implements Fruit{

@Override
public String getName() {
// TODO Auto-generated method stub
return "Orange";
}

@Override
public String getColor() {
// TODO Auto-generated method stub
return "Yellow";
}

public void orangeDo(){
System.out.println("orange do can be look");
}


}
IFruitFactory.java

package designModeAbstractFactory;

//抽象工厂角色
public abstract class IFruitFactory {

public abstract Apple createApple();

public abstract Orange createOrange();
}
FruitFactory.java

package designModeAbstractFactory;

//具体工厂类
public class FruitFactory extends IFruitFactory {

@Override
public Apple createApple() {
// TODO Auto-generated method stub
return new Apple();
}

@Override
public Orange createOrange() {
// TODO Auto-generated method stub
return new Orange();
}


}
AbstractFactoryTest.java

package designModeAbstractFactory;

//测试类
public class AbstractFactoryTest {

public static void main(String args[]){

IFruitFactory fruitFactory = new FruitFactory();

Apple apple = fruitFactory.createApple();
System.out.println(apple.getName());
System.out.println(apple.getColor());
apple.appleDo();

Orange orange=fruitFactory.createOrange();
System.out.println(orange.getName());
System.out.println(orange.getColor());
orange.orangeDo();

}

}

运行结果:

Apple
Red
apple can be eat
Orange
Yellow
orange do can be look

六、总结

        无论是简单工厂模式、工厂方法模式还是抽象工厂模式,他们之间都是可以相互转化的,而不同之处在于他们所对应的产品种类规模和产品种类级别。因此只要灵活运用,不必在意具体是那种方式。
        所以,在使用工厂模式时,只需要关心降低耦合度的目的是否达到了。