抽象工厂模式
抽象工厂模式
抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。
在抽象工厂模式中,接口是负责创建一个相关对象的工厂,不需要显式指定它们的类。每个生成的工厂都能按照工厂模式提供对象。
抽象工厂模式也就是不仅生产鼠标,同时生产键盘。
也就是 PC 厂商是个父类,有生产鼠标,生产键盘两个接口。
戴尔工厂,惠普工厂继承它,可以分别生产戴尔鼠标+戴尔键盘,和惠普鼠标+惠普键盘。
创建工厂时,由戴尔工厂创建。
后续工厂.生产鼠标()则生产戴尔鼠标,工厂.生产键盘()则生产戴尔键盘。
1、为键盘和鼠标创建接口
1 public interface Keybo { 2 void sayHi(); 3 }
1 public interface Mouse { 2 void sayHi(); 3 }
2、实现接口的实体类
1 public class DellKeybo implements Keybo { 2 @Override 3 public void sayHi() { 4 System.out.println("Dellkeybo"); 5 } 6 }
1 public class HpKeybo implements Keybo { 2 @Override 3 public void sayHi() { 4 System.out.println("HpKeybo"); 5 } 6 }
1 public class DellMouse implements Mouse { 2 @Override 3 public void sayHi() { 4 System.out.println("DellMouse"); 5 } 6 }
1 public class HpMouse implements Mouse { 2 @Override 3 public void sayHi() { 4 System.out.println("HpMouse"); 5 } 6 }
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 }
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 }
4、建立PC工厂类
1 public abstract class PcFactory { 2 public abstract Keybo getKeybo(String keyboType); 3 4 public abstract Mouse getMouse(String MouseType); 5 }
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 }
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 }
7、测试结果
Dellkeybo
HpKeybo
DellMouse
HpMouse
参考:https://www.runoob.com/design-pattern/abstract-factory-pattern.html