抽象工厂
抽象工厂
概念:围绕一个超级工厂来创建其他工厂,该超级工厂又被称为其他工厂的工厂。
优点
- 具体产品在应用层的代码隔离,无需创建细节
- 将一系列的产品统一到一起创建
缺点
- 规定了所有可能被创建的产品集合,产品族中拓展新的产品困难;
- 增加了系统的抽象性和理解难度
UML类图
首先先看一下这张被使用了无数次的类图

再接着是这个上代码前的一个模型图。
第一要素:产品是固定的,很少会发生改变

代码案例
首先创建四个具体实现类
/**
* 华为手机
*/
public class huaweiPhone implements IPhoneProduct{
public void start() {
System.out.println("华为开机");
}
public void shutdown() {
System.out.println("华为关机");
}
public void callup() {
System.out.println("华为打电话");
}
public void sendMsg() {
System.out.println("华为发短信");
}
}
华为路由器
public class huaweiRouter implements IRouterProduct{
public void start() {
System.out.println("华为路由器开机");
}
public void shutdown() {
System.out.println("华为路由器关机");
}
}
小米手机
/**
* 小米手机
*/
public class xiaomiPhone implements IPhoneProduct{
public void start() {
System.out.println("小米开机");
}
public void shutdown() {
System.out.println("小米关机");
}
public void callup() {
System.out.println("小米打电话");
}
public void sendMsg() {
System.out.println("小米发短信");
}
}
小米路由器
public class xiaomirouter implements IRouterProduct{
public void start() {
System.out.println("启动小米路由器");
}
public void shutdown() {
System.out.println("关闭小米路由器");
}
}
根据上面的实现方法抽象出来两个接口,分别为:手机接口和路由器接口
手机接口
public interface IPhoneProduct {
void start();
void shutdown();
void callup();
void sendMsg();
}
路由器接口
public interface IRouterProduct {
void start();
void shutdown();
}
还可以根据上面的功能接口,抽象出来两个工厂类:小米工厂和华为工厂
小米工厂
public class xiaomiFactory implements IProductFactory{
public IPhoneProduct iphoneProduct() {
return new xiaomiPhone();
}
public IRouterProduct irouterProduct() {
return new xiaomirouter();
}
}
华为工厂
public class huaweiFactory implements IProductFactory{
public IPhoneProduct iphoneProduct() {
return new huaweiPhone();
}
public IRouterProduct irouterProduct() {
return new huaweiRouter();
}
}
将这个工厂进行抽象:产品接口
/**
* 抽象工厂
*/
public interface IProductFactory {
//生产手机
IPhoneProduct iphoneProduct();
//生产路由器
IRouterProduct irouterProduct();
}
然后是进行测试
public class FactoryTest {
public static void main(String[] args) {
IProductFactory xiaomiFactory = new xiaomiFactory();
IPhoneProduct iPhoneProduct = xiaomiFactory.iphoneProduct();
iPhoneProduct.start();
IProductFactory huaweiFactory = new huaweiFactory();
IPhoneProduct iPhoneProduct1 = huaweiFactory.iphoneProduct();
iPhoneProduct1.callup();
}
}
注意:
这种方式在产品不会增加,或者预计增加不是特别频繁的时候可以使用。
本文来自博客园,作者:King-DA,转载请注明原文链接:https://www.cnblogs.com/qingmuchuanqi48/articles/15022208.html

浙公网安备 33010602011771号