Abstract Factory
一系列相互依赖的对象的创建工作 (提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类)
① 创建抽象工厂SoftWareFactory(生成一个软件,iOS平台或者Android平台)
/**
* 软件工程基类
* 一个软件在多个平台的应用iOS和Android
*/
public abstract class SoftWareFactory {
// 首先需要建立与平台的连接
abstract SoftWareCon createSoftWareCon();
// 软件运行环境
abstract SoftWareEnv createSoftWareEnv();
}
// 其中,SoftWareCon和SoftWareEnv为以下接口
public interface SoftWareCon {
// 负责连接指定平台
void connection();
}
public interface SoftWareEnv {
// 负责指定平台环境运行
void run();
}
② 创建工厂子类(iOS和Android)
/**
* 生产iOS软件的 "连接对象和软件运行对象" 的工厂
*/
public class IOSSoftWareFactory extends SoftWareFactory {
@Override
SoftWareCon createSoftWareCon() {
return new IOSSoftWareCon();
}
@Override
SoftWareEnv createSoftWareEnv() {
return new IOSSoftWareEnv();
}
}
/**
* 生产iOS软件的 "连接对象和软件运行对象" 的工厂
*/
public class AndroidSoftWareFactory extends SoftWareFactory {
@Override
SoftWareCon createSoftWareCon() {
return new AndroidSoftWareCon();
}
@Override
SoftWareEnv createSoftWareEnv() {
return new AndroidSoftWareEnv();
}
}
③ 创建iOS连接接口和运行环境接口的具体类
public class IOSSoftWareCon implements SoftWareCon {
@Override
public void connection() {
System.out.println("iOS系统连接成功");
}
}
public class IOSSoftWareEnv implements SoftWareEnv {
@Override
public void run() {
System.out.println("iOS系统环境运行成功");
}
}
④ 创建Android连接接口和运行环境接口的具体类
public class AndroidSoftWareCon implements SoftWareCon {
@Override
public void connection() {
System.out.println("Android系统成功连接");
}
}
public class AndroidSoftWareEnv implements SoftWareEnv {
@Override
public void run() {
System.out.println("Android环境运行成功");
}
}
⑤ 测试类
public class Test {
public static void main(String[] args) {
// IOS,面向接口
SoftWareFactory factory = new IOSSoftWareFactory();
// Android: SoftWareFactory factory = new AndroidSoftWareFactory();
SoftWareCon softWareCon = factory.createSoftWareCon();
SoftWareEnv softWareEnv = factory.createSoftWareEnv();
softWareCon.connection();
softWareEnv.run();
}
}
场景:解决某一特定系列下的对象之间有相互依赖的问题,如果没有应对 " 多系列对象构建 " 的需求变化,则没有必要使用Abstract Factory模式,这时使用简单工厂即可
优点:主要在于应对 新系列 的需求变动
如该软件支持Android,iOS,之后还会支持YunOS等系统
缺点:难以应对新对象的需求变动
如要在抽象基类中添加新对象的话就不合适了,抽象基类要求稳定
任何模式的稳定的部分就是它的缺点