抽象工厂模式

抽象工厂模式

抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。

在抽象工厂模式中,接口是负责创建一个相关对象的工厂,不需要显式指定它们的类。每个生成的工厂都能按照工厂模式提供对象。


 

抽象工厂模式也就是不仅生产鼠标,同时生产键盘。

也就是 PC 厂商是个父类,有生产鼠标,生产键盘两个接口。

戴尔工厂,惠普工厂继承它,可以分别生产戴尔鼠标+戴尔键盘,和惠普鼠标+惠普键盘。

创建工厂时,由戴尔工厂创建。

后续工厂.生产鼠标()则生产戴尔鼠标,工厂.生产键盘()则生产戴尔键盘。

 

1、为键盘和鼠标创建接口

1 public interface Keybo {
2     void sayHi();
3 }
Keybo
1 public interface Mouse {
2     void sayHi();
3 }
Mouse

2、实现接口的实体类

1 public class DellKeybo implements  Keybo {
2     @Override
3     public void sayHi() {
4         System.out.println("Dellkeybo");
5     }
6 }
DellKeybo
1 public class HpKeybo implements Keybo {
2     @Override
3     public void sayHi() {
4         System.out.println("HpKeybo");
5     }
6 }
HpKeybo
1 public class DellMouse implements  Mouse {
2     @Override
3     public void sayHi() {
4         System.out.println("DellMouse");
5     }
6 }
DellMouse
1 public class HpMouse implements  Mouse {
2     @Override
3     public void sayHi() {
4         System.out.println("HpMouse");
5     }
6 }
HpMouse

3、创建键盘和鼠标的工程类

 1 public class KeyboFactory extends  PcFactory {
 2     @Override
 3     public Keybo getKeybo(String keyboType) {
 4        if(keyboType == null){
 5          return null;
 6        }
 7        if (keyboType.equals("DellKeybo")){
 8            return new DellKeybo();
 9        }
10        if (keyboType.equals("HpKeybo")){
11            return  new HpKeybo();
12        }
13         return null;
14     }
15 
16     @Override
17     public Mouse getMouse(String MouseType) {
18         return null;
19     }
20 }
KeyboFactory
 1 public class MouseFactory extends   PcFactory {
 2     @Override
 3     public Keybo getKeybo(String keyboType) {
 4         return null;
 5     }
 6 
 7     @Override
 8     public Mouse getMouse(String MouseType) {
 9         if(MouseType == null){
10             return  null;
11         }
12         if(MouseType.equals("DellMouse")){
13             return new DellMouse();
14         }
15         if(MouseType.equals("HpMouse")){
16             return new HpMouse();
17         }
18         return null;
19     }
20 }
MouseFactory

4、建立PC工厂类

1 public abstract class PcFactory {
2     public abstract Keybo getKeybo(String keyboType);
3 
4     public abstract Mouse getMouse(String MouseType);
5 }
PcFactory

5、创建一个工厂创造器/生成器类

 1 public class FactoryProducer {
 2     public static  PcFactory getFactory(String choice){
 3       if(choice.equals("keyboFactory")){
 4           return  new KeyboFactory();
 5       }
 6       if(choice.equals("mouseFactory")){
 7           return new MouseFactory();
 8       }
 9       return  null;
10     }
11 }
FactoryProducer

6、创建测试类

 1 public class PcFactoryPatternDemo {
 2     public static void main(String[] args) {
 3         PcFactory keybo = FactoryProducer.getFactory("keyboFactory");
 4         Keybo dellKeybo = keybo.getKeybo("DellKeybo");
 5         dellKeybo.sayHi();
 6         Keybo hpKeybo = keybo.getKeybo("HpKeybo");
 7         hpKeybo.sayHi();
 8         PcFactory mouse = FactoryProducer.getFactory("mouseFactory");
 9         Mouse  dellMouse = mouse.getMouse("DellMouse");
10         dellMouse.sayHi();
11         Mouse  hpMouse = mouse.getMouse("HpMouse");
12         hpMouse.sayHi();
13     }
14 }
PcFactoryPatternDemo

7、测试结果

Dellkeybo
HpKeybo
DellMouse
HpMouse

参考:https://www.runoob.com/design-pattern/abstract-factory-pattern.html

posted @ 2019-11-25 11:00  honghj  阅读(606)  评论(0编辑  收藏  举报