在软件工程中,设计模式是一种被广泛使用的解决方案,用于解决特定类型的问题,我们将重点讨论一种设计模式——抽象工厂模式,抽象工厂模式是一种创建型设计模式,它提供了一种方式,可以将一组具有同一主题的单独的工厂封装起来,这样,当我们需要创建一个特定类型的产品时,只需要调用这个工厂即可,而不需要知道具体的实现细节。
我们需要了解什么是抽象工厂模式,抽象工厂模式是一种创建型设计模式,它提供了一种方式,可以将一组具有同一主题的单独的工厂封装起来,这样,当我们需要创建一个特定类型的产品时,只需要调用这个工厂即可,而不需要知道具体的实现细节。
抽象工厂模式的主要角色有以下几个:
1、抽象工厂(Abstract Factory):这是一个创建产品的接口,定义了创建产品的方法,但没有具体实现。
2、具体工厂(Concrete Factory):这是实现了抽象工厂接口的具体工厂类,负责创建具体的产品。
3、抽象产品(Abstract Product):这是一个产品的接口,定义了一些产品共有的方法。
4、具体产品(Concrete Product):这是实现了抽象产品接口的具体产品类,实现了抽象产品的方法。
5、客户端(Client):这是使用抽象工厂和具体产品的类,只需要与抽象工厂交互即可创建具体的产品。
下面我们通过一个简单的例子来说明抽象工厂模式的使用:
假设我们有一个主题是“电脑”,我们需要创建两款电脑:MacBook Pro 和 iMac,这两款电脑有很多共同的属性和方法,例如都有屏幕、键盘、触控板等,为了简化问题,我们可以假设这些都是共享的属性和方法,我们可以使用抽象工厂模式来创建这两款电脑。
我们定义一个抽象产品类——Computer:
public interface Computer { void display(); }
我们定义一个具体产品类——MacBookPro:
public class MacBookPro implements Computer { @Override public void display() { System.out.println("This is a MacBook Pro."); } }
我们定义一个具体产品类——iMac:
public class iMac implements Computer { @Override public void display() { System.out.println("This is an iMac."); } }
我们定义一个抽象工厂类——ComputerFactory:
public interface ComputerFactory { Computer createComputer(); }
我们定义两个具体工厂类——MacBookProFactory和iMacFactory:
public class MacBookProFactory implements ComputerFactory { @Override public Computer createComputer() { return new MacBookPro(); } }
public class iMacFactory implements ComputerFactory { @Override public Computer createComputer() { return new iMac(); } }
我们定义一个客户端类——ComputerClient:
public class ComputerClient { public static void main(String[] args) { ComputerFactory macBookProFactory = new MacBookProFactory(); Computer computer = macBookProFactory.createComputer(); computer.display(); // This is a MacBook Pro. ; ComputerFactory iMacFactory = new iMacFactory(); computer = iMacFactory.createComputer(); computer.display(); // This is an iMac. } }