- 模式属于创立型模式,它提供了一种创建对象的最佳形式。
- 形象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创立其余工厂。该超级工厂又称为其余工厂的工厂。
- 在形象工厂模式中,接口是负责创立一个相干对象的工厂,不须要显式指定它们的类。每个生成的工厂都能依照工厂模式提供对象。
接口 IComputerProduct
// 电脑产品接口
public interface IComputerProduct {void start();
void shutdown();}
子类 AComputer 和 BComputer
// A 电脑
public class AComputer implements IComputerProduct {
@Override
public void start() {System.out.println("开启 A 电脑");
}
@Override
public void shutdown() {System.out.println("敞开 A 电脑");
}
}
// B 电脑
public class BComputer implements IComputerProduct {
@Override
public void start() {System.out.println("开启 B 电脑");
}
@Override
public void shutdown() {System.out.println("敞开 B 电脑");
}
}
接口 ITVProduct
// 电视机产品接口
public interface ITVProduct {void start();
void shutdown();}
子类 ATV 和 BTV
// A 电视
public class ATV implements ITVProduct {
@Override
public void start() {System.out.println("开启 A 电视");
}
@Override
public void shutdown() {System.out.println("敞开 A 电视");
}
}
// B 电视
public class BTV implements ITVProduct {
@Override
public void start() {System.out.println("开启 B 电视");
}
@Override
public void shutdown() {System.out.println("敞开 B 电视");
}
}
接口 IProductFactory
// 形象产品工厂
public interface IProductFactory {
// 生产电脑
IComputerProduct iComputerProduct();
// 生产电视
ITVProduct itvProduct();}
子类 AFactory 和 BFactory
public class AFactory implements IProductFactory {
@Override
public IComputerProduct iComputerProduct() {return new AComputer();
}
@Override
public ITVProduct itvProduct() {return new ATV();
}
}
public class BFactory implements IProductFactory {
@Override
public IComputerProduct iComputerProduct() {return new BComputer();
}
@Override
public ITVProduct itvProduct() {return new BTV();
}
}
测试类
public class Test {public static void main(String[] args) {AFactory aFactory = new AFactory();// A 工厂
IComputerProduct iComputerProduct = aFactory.iComputerProduct();// A 工厂电脑产品
iComputerProduct.start();
iComputerProduct.shutdown();
ITVProduct itvProduct = aFactory.itvProduct();// A 工厂电视产品
itvProduct.start();
itvProduct.shutdown();
BFactory bFactory = new BFactory();// B 工厂
iComputerProduct = bFactory.iComputerProduct();// B 工厂电脑产品
iComputerProduct.start();
iComputerProduct.shutdown();
itvProduct = bFactory.itvProduct();// B 工厂电视产品
itvProduct.start();
itvProduct.shutdown();
/**
* 输入后果:* 开启 A 电脑
* 敞开 A 电脑
* 开启 A 电视
* 敞开 A 电视
* 开启 B 电脑
* 敞开 B 电脑
* 开启 B 电视
* 敞开 B 电视
*/
}
}
测试后果
开启 A 电脑
敞开 A 电脑
开启 A 电视
敞开 A 电视
开启 B 电脑
敞开 B 电脑
开启 B 电视
敞开 B 电视