首页 > 学院 > 开发设计 > 正文

设计模式之抽象工厂模式

2019-11-06 07:40:44
字体:
来源:转载
供稿:网友

设计模式之抽象工厂模式

1. 抽象工厂模式定义

抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 在抽象工厂模式中,接口是负责创建一个相关对象的工厂,不需要显式指定它们的类。每个生成的工厂都能按照工厂模式提供对象。

意图:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。主要解决:主要解决接口选择的问题。何时使用:系统的产品有多于一个的产品族,而系统只消费其中某一族的产品。如何解决:在一个产品族里面,定义多个产品。关键代码:在一个工厂里聚合多个同类产品。

2. 代码实现

image

2.1 定义同一个产品族产品接口

public interface ICpu { public void pCpu();}public interface IMainBorad { public void pMainBorad();}

2.2 定义抽象工厂接口

public interface AbstractFactory { public ICpu createCpu(); public IMainBorad createMBoard();}

2.3 定义产品

public class AmdCpu implements ICpu{ @Override public void pCpu() { System.out.PRintln("amd cpu"); }}public class AmdMBoard implements IMainBorad{ @Override public void pMainBorad() { System.out.println("amd Mainboard"); }}public class InterCpu implements ICpu { @Override public void pCpu() { System.out.println("Inter cpu"); }}public class InterMBoard implements IMainBorad { @Override public void pMainBorad() { System.out.println("Inter mainBoard"); }}

2.4 定义工厂

public class AmdFactory implements AbstractFactory{ @Override public ICpu createCpu() { return new AmdCpu(); } @Override public IMainBorad createMBoard() { return new AmdMBoard(); }}public class InterFactory implements AbstractFactory{ @Override public ICpu createCpu() { return new InterCpu(); } @Override public IMainBorad createMBoard() { return new InterMBoard(); }}

2.5 调用

public class Main { public static void main(String[] args) { AmdFactory amdFactory = new AmdFactory(); ICpu createCpu = amdFactory.createCpu(); createCpu.pCpu(); IMainBorad createMBoard = amdFactory.createMBoard(); createMBoard.pMainBorad(); InterFactory interFactory = new InterFactory(); ICpu createCpu2 = interFactory.createCpu(); createCpu2.pCpu(); IMainBorad createMBoard2 = interFactory.createMBoard(); createMBoard2.pMainBorad(); }}

3. 总结

假设一个子系统需要一些产品对象,而这些产品又属于一个以上的产品等级结构。 那么为了将消费这些产品对象的责任和创建这些产品对象的责任分割开来, 可以引进抽象工厂模式。这样的话,消费产品的一方不需要直接参与产品的创建工作 ,而只需要向一个公用的工厂接口请求所需要的产品。


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表