23种设计模式系列目录
23种设计模式之单例模式(Singleton Pattern)
23种设计模式之适配器模式(Adapter Pattern)
23种设计模式之抽象工厂模式(Abstract Factory Pattern)
23种设计模式之装饰器模式(Decorator Pattern)
--------------------------------------------------------------------------------------------------------------------------
读完本篇文章将会了解以下问题
1. 抽象工厂模式定义
2. 抽象工厂模式代码实现
3. 抽象工厂模式的优缺点分析
4. 抽象工厂模式使用场景
--------------------------------------------------------------------------------------------------------------------------
1. 抽象工厂模式定义
抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。在抽象工厂模式中,接口是负责创建一个相关对象的工厂,不需要显式指定它们的类。每个生成的工厂都能按照工厂模式提供对象。
目的:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。
何时使用:系统的产品有多于一个的产品族(包含一组互相有关联产品的集合),而系统只消费其中某一族的产品。
如何解决:在一个产品族接口内定义多个产品,由对应的工厂去生产一个产品族内的一系列产品。
关键代码:在一个工厂里聚合多个同系列的产品。
2. 抽象工厂模式代码实现
整体类图:
Keybo:键盘抽象类
public abstract class Keybo {
public abstract void light();
}
HpKeyBo:惠普键盘类
public class HpKeyBo extends Keybo{
@Override
public void light() {
System.out.println("HpKeyBo:light");
}
}
HpKeyBo:联想键盘类
public class LenovoKeyBo extends Keybo{
@Override
public void light() {
System.out.println("LenovoKeyBo:light");
}
}
Mouse:鼠标抽象类
public abstract class Mouse {
public abstract void light();
}
HpMouse:惠普鼠标类
public class HpMouse extends Mouse{
@Override
public void light() {
System.out.println("HpMouse:light");
}
}
LenovoMouse:联想鼠标类
public class LenovoMouse extends Mouse{
@Override
public void light() {
System.out.println("LenovoMouse:light");
}
}
Factory:工厂抽象类
public abstract class Factory{
/**
* 工厂的抽象方法,由具体的工厂类去实现
*/
public abstract Mouse createMouse();
public abstract Keybo createKeybo();
}
HpFactory:惠普工厂类(只生产惠普的键盘和鼠标)
public class HpFactory extends Factory{
@Override
public Mouse createMouse() {
return new HpMouse();
}
@Override
public Keybo createKeybo() {
return new HpKeyBo();
}
}
LenovoFactory:联想工厂类(只生产联想的键盘和鼠标)
public class LenovoFactory extends Factory{
@Override
public Mouse createMouse() {
return new LenovoMouse();
}
@Override
public Keybo createKeybo() {
return new LenovoKeyBo();
}
}
测试方法:
public class practice {
public static void main(String[] args) {
Factory hpFactory = new HpFactory();
Factory lenovoFactory = new LenovoFactory();
hpFactory.createKeybo().light();
hpFactory.createMouse().light();
lenovoFactory.createKeybo().light();
lenovoFactory.createMouse().light();
}
}
3. 抽象工厂模式的优缺点分析
抽象工厂模式的优点:
1、可以在类的内部对产品族进行约束,当一个产品族中的多个对象被设计成一起工作时,该设计模式可以保证客户端始终只使用同一个产品族中的对象。
抽象工厂模式的缺点:
1、产品族扩展非常困难,要增加一个系列的某一产品,既要在抽象层增加代码,又要在具体实现层中增加代码。
4. 抽象工厂模式使用场景
1、同一个品牌下的电脑配件(惠普只能装惠普自己家系列产品的配件)
2、网游游戏中的套装,一整套套装才能触发效果,所以需要每次换装一整套一整套的换