Java-23个设计模式 Abstract Factory 抽象工厂模式

 Abstract Factory

一系列相互依赖的对象的创建工作 (提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类)

Java-23个设计模式 Abstract Factory 抽象工厂模式_第1张图片

① 创建抽象工厂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等系统

缺点:难以应对新对象的需求变动

           如要在抽象基类中添加新对象的话就不合适了,抽象基类要求稳定

任何模式的稳定的部分就是它的缺点

 

 

 

 

 

 

你可能感兴趣的:(23个设计模式(学习笔记))