Android 抽象工厂模式
  HvTJUzsxOBtS 2023年11月25日 15 0



文章目录

  • 1、抽象工厂模式介绍
  • 2、抽象工厂模式的定义
  • 3、抽象工厂模式的使用场景
  • 4、抽象工厂模式的简单实现
  • 5、小结


1、抽象工厂模式介绍

抽象工厂模式也是创建型模式之一,抽象工厂模式起源于对不同操作系统的图形化解决方案,如不同操作系统的按钮和文本框控件及其实现。

2、抽象工厂模式的定义

为创建一组相关或者相互依赖的对象提供接口,而不需要具体指定他们的具体类。

3、抽象工厂模式的使用场景

一个对象有相同的约束时可以使用抽象工厂模式。

4、抽象工厂模式的简单实现

以车厂为例,Q3, Q5, Q7, 虽然是一个车系,但是两者之间的零部件差别很大,
1)Q3 发动机 国产 ; Q7 发动机 原装进口
2)Q3 轮胎 普通轮胎 ; Q7 越野轮胎
3) Q3 比较普通的制动系统 ; Q7 制动性极好的制动系统

Q3 Q7 虽然是 同一种的产品类型,但是发动机 轮胎 制动性 都不一样,

这时候就使用到了抽象工厂模式,首先工厂需要生产 轮胎 、 发动机 、 制动系统 这三部分组件。

代码架构 :

Android     抽象工厂模式_android

  1. 先建立一个抽象车厂类 CarFactory

(1)先创建 一个 汽车工厂类,用来生产同型号的汽车,说白了 就是 Q3 Q5 Q7 各自继承
(2)由于是同类型的车但是 里面的零件会不同,所以我们把类里添加 不同的 零件对象 类

package com.example.lum.abstortefactory;

/**
 * Created by lum on 2018/10/13.
 */


//创建一个汽车工厂 抽象一个汽车工厂类
public abstract class CarFactory {
    //生产轮胎
    public abstract  ITire createTire();   //返回 轮胎对象

    //生产发动机
    public abstract  IEngin createEngine();  //返回 发动机对象

    //生产制动系统
    public abstract  IBrake createBrake();  //返回 制动系统 对象

}

这里我们为每一个零件定义一个接口,并分别创建两个不同的实现类表示不同的零部件产品

5) 轮胎接口 以及 相关类
(1) 轮胎接口

package com.example.lum.abstortefactory;

/**
 * Created by lum on 2018/10/13.
 */

public interface ITire {

    //轮胎接口
    void tire();
}

(2)普通轮胎类

package com.example.lum.abstortefactory;

/**
 * Created by lum on 2018/10/13.
 */

public class NormalTire implements  ITire {
    @Override
    public void tire() {
        System.out.println("普通轮胎");
    }
}

(3)越野轮胎类

package com.example.lum.abstortefactory;

/**
 * Created by lum on 2018/10/13.
 */

public class SUVTire implements  ITire {
    @Override
    public void tire() {
        System.out.println("越野轮胎");
    }
}

6)发动机接口 以及相关类
(1)发动机 接口

package com.example.lum.abstortefactory;

/**
 * Created by lum on 2018/10/13.
 */

public interface IEngin {
    //发动机
    void engine();
}

(2)国产发动机 类

package com.example.lum.abstortefactory;

/**
 * Created by lum on 2018/10/13.
 */

public class DomesticEngin implements  IEngin {
    @Override
    public void engine() {
        System.out.println("国产发动机");
    }
}

(3)进口发动机类

package com.example.lum.abstortefactory;

/**
 * Created by lum on 2018/10/13.
 */

public class ImportEngin implements  IEngin {
    @Override
    public void engine() {
        System.out.println("进口发动机");
    }
}

7)制动系统接口 以及 相关类
(1)制动系统接口

package com.example.lum.abstortefactory;

/**
 * Created by lum on 2018/10/13.
 */

public interface  IBrake {
    //制动系统
    void  brake();
}

(2)普通的制动系统

package com.example.lum.abstortefactory;

/**
 * Created by lum on 2018/10/13.
 */

public class NormalBrake implements  IBrake {
    @Override
    public void brake() {
        System.out.println("普通制动");
    }
}

(3)高级的制动系统

package com.example.lum.abstortefactory;

/**
 * Created by lum on 2018/10/13.
 */

public class SeniorBrake implements  IBrake {
    @Override
    public void brake() {
        System.out.println("高级制动");
    }
}

8)具体的 不同的生产 车厂 Q3 生产厂

package com.example.lum.abstortefactory;

/**
 * Created by lum on 2018/10/13.
 */


//对于 Q3工厂 使用其他的 零部件不同
public class Q3Factory extends  CarFactory {
    @Override
    public ITire createTire() {
        return new NormalTire();    //返回普通的轮胎类
    }

    @Override
    public IEngin createEngine() {
        return  new DomesticEngin(); //返回国产发动机
    }

    @Override
    public IBrake createBrake() {
        return new NormalBrake(); //返回一般制动
    }
}

9)具体的 不同的生产 车厂 Q7 生产厂

package com.example.lum.abstortefactory;

/**
 * Created by lum on 2018/10/13.
 */


// Q7  车生产类
public class Q7Factory extends CarFactory {
    @Override
    public ITire createTire() {
        return new SUVTire(); //返回SUV 车胎
    }

    @Override
    public IEngin createEngine() {
        return new ImportEngin(); //返回进口轮胎
    }

    @Override
    public IBrake createBrake() {
        return  new SeniorBrake(); //返回高级制动
    }
}

10) 客户类 具体的实例化调用 生产

package com.example.lum.abstortefactory;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //构造一个生产Q3 的工厂
        CarFactory factoryQ3 = new Q3Factory();
        factoryQ3.createTire().tire();
        factoryQ3.createEngine().engine();
        factoryQ3.createBrake().brake();


        //构造一个 生产Q7 的 工厂
        CarFactory factoryQ7 = new Q7Factory();
        factoryQ7.createTire().tire();
        factoryQ7.createEngine().engine();
        factoryQ7.createBrake().brake();
    }
}

最后运行的结果显示:

Android     抽象工厂模式_android_02

可以看出 Q3 Q7 使用的是不同的 零件组装。

5、小结

1)适用于相同 类型 内部不同方法时 使用
2)不容易扩展

文献参考:
Android 源码设计模式解析与实战 第二版

本人郑重声明,本博客所编文章、图片版权归权利人持有,本博只做学习交流分享所用,不做任何商业用途。访问者可將本博提供的內容或服务用于个人学习、研究或欣赏,不得用于商业使用。同時,访问者应遵守著作权法及其他相关法律的规定,不得侵犯相关权利人的合法权利;如果用于商业用途,须征得相关权利人的书面授权。若文章、图片的原作者不愿意在此展示內容,请及时通知在下,將及时予以刪除。


【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月25日 0

暂无评论

推荐阅读
HvTJUzsxOBtS