【JAVA】:抽象工厂模型

2020/5/24 Java

# 抽象工厂模型

一、什么是抽象工厂模型         抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂其他工厂。其他工厂生成产品(工厂模型),这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。

二、现实生活举例         有一个厂商专门生成鼠标和键盘,其旗下有俩个公司,分别是戴尔和惠普俩个工厂,分别生产戴尔鼠标、戴尔键盘和惠普鼠标、惠普键盘。

三、优缺点 (1)当一个产品族中的多个对象被设计成一起工作时,它能保证客户端始终只使用同一个产品族中的对象。 (2)产品族扩展非常困难,要增加一个系列的某一产品,既要在抽象的 Creator(工厂类) 里加代码,又要在具体的里面加代码。

四、实现方法 步骤一:定义俩个接口

//戴尔产品
public interface Daleproduct {
   void daleproduct();
}

//惠普产品
public interface Hpproduct {
   public void hpproduct();
}

1
2
3
4
5
6
7
8
9
10

步骤二:接口实现类

public class Dale_Mouse implements Daleproduct{
	public void daleproduct() {
		 System.out.println("生产一个戴尔品牌鼠标");	
	}
}
	
public class Dale_Keyboard implements Daleproduct{
	public void daleproduct() {
		System.out.println("生产一个戴尔品牌键盘");	
	}
}

public class Hp_Mouse implements Hpproduct {
	public void hpproduct() {
		System.out.println("生产一个惠普品牌鼠标");	
	}
}

public class Hp_Keyboard implements Hpproduct {
	public void hpproduct() {
		System.out.println("生产一个惠普品牌键盘");	
	}
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24

步骤三:创建抽象工厂

//为 Dale  和 Hp  对象创建抽象类来获取工厂。
public abstract class AbstractFactory {
    public abstract Dale  getdale(String dale );
    public abstract Hp  gethp(String hp );
}
1
2
3
4
5

步骤四:创建戴尔和惠普工厂

//戴尔工厂
public class Dalefactory extends  AbstractFactory{
	public Dale  getdale(String dale) {
		if(dale==null){
			return null;
		}else if(dale.equalsIgnoreCase("DALE_MOUSE")){
			return new Dale_Mouse(); 
		}else if(dale.equalsIgnoreCase("DALE_KEYBOARD")){
			return new Dale_Keyboard();
		}
		return null;
	}
	public Hp gethp(String hp) {
		return null;
	}
}

//惠普工厂
public class Hpfactory extends  AbstractFactory{
	public dale getdale(String dale) {
        return null;
        }
	public Hp gethp(String hp) {
		if(hp==null){
			return null;
		}else if(dale.equalsIgnoreCase("HP_MOUSE")){
			return new Hp_Mouse(); 
		}else if(dale.equalsIgnoreCase("HP_KEYBOARD")){
			return new Hp_Keyboard();
		}
		return null;
	   }
	}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33

步骤五:超级工厂(生产惠普和戴尔工厂)

public class Supperfactory {
  public static AbstractFactory getfactory(String choice){
	  if(choice.equalsIgnoreCase("DALEFACTORY")){
		  return new Dalefactory ();
	  }else if(choice.equalsIgnoreCase("HPFACTORY")){
		  return new Hpfactory();
	  }else if(choice==null){
		  return null;
	  }
	  return null;
  }
}
1
2
3
4
5
6
7
8
9
10
11
12

步骤六:测试(生产产品)

public class Demo {
   public static void main(String[] args) {
	//获取戴尔工厂
	AbstractFactory dale_factory=SupperProducer.getfactory("DALEFACTORY");
	//生产戴尔产品
	Dale_Mouse dmouse=dale_factory.getdale("DALE_MOUSE");
	Dale_Keyboard dkeyboard=dale_factory.getdale("DALE_KEYBOARD");
	dmouse.daleproduct();
	dkeyboard.daleproduct();
	
	
	//获取惠普工厂
	AbstractFactory hp_factory=FactoryProducer.getfactory("HPFACTORY");
	//生产惠普产品
	Hp_Mouse hmouse=hp_factory.getdale("HP_MOUSE");
	Hp_Keyboard hkeyboard=hp_factory.getdale("HP_KEYBOARD");
	hmouse.hpproduct();
	hkeyboard.hpproduct();
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

输出结果: 在这里插入图片描述