初学抽象工厂模式

初学抽象工厂

注:所有设计模式翻译某位老师讲解的视频内容(个别内容不是 如:枚举)
重:单纯记录供自己使用

联想、苹果、华为 三个品牌
每个品牌下有:
电脑、电视、音箱 三种类别电器

步骤及思路:
简单工厂:将工厂创建逻辑写入工厂类内部,直接调用工厂类。
根据请求参数不同创建不同工厂对象。
抽象工厂:
1、抽象工厂接口提供可供外部调用的接口,如:当前有三种电器则需要 电脑、电视、音箱三种接口。
抽象工厂代码:
2、抽象工厂的实现,实现抽象工厂接口,并实现其中的方法,当前有三个品牌 联想、苹果、华为 那么此时需要三个工厂的实现。
3、创建类别抽象 电脑、电视、音箱 三个接口,每个接口有各自抽象方法,如电脑有:启动、办公、游戏。
4、创建类别的实现,实现抽象方法。
5、调用接口:如:需要华为电脑则首先创建华为工厂实现,调用华为电脑的接口,然后可以自行选择启动方法,还是办公或者游戏方法。

抽象工厂接口提供可供外部调用的接口,如:当前有三种电器则需要 电脑、电视、音箱三种接口。
抽象工厂代码:

package electric;

import electric.abstrProduct.productClass.IComputer;
import electric.abstrProduct.productClass.Isound;
import electric.abstrProduct.productClass.Itelevision;

/**
 * 工厂的抽象
 *
 * 使用电器作为例子
 * 工厂类首先筛选有哪些一级大类
 * 品牌:联想、戴尔、华为、苹果
 */
public interface IFactory {

    /**
     * 生产电视(返回值为电视的抽象)
     */
    public Itelevision television();

    /**
     * 生产音箱(返回值为音箱的抽象)
     */
    public Isound sound();

    /**
     * 生产电脑(返回值为电脑的抽象)
     */
    public IComputer computer();

}

抽象工厂的实现,实现抽象工厂接口,并实现其中的方法,当前有三个品牌 联想、苹果、华为 那么此时需要三个工厂的实现。

取其中一个为例:

package electric;

import electric.abstrProduct.productClass.*;

/**
 * 华为生产工厂
 */
public class HWFactory implements IFactory {

    /**
     * 生产电视
     * @return
     */
    @Override
    public Itelevision television() {
        return new HWItelevision();
    }

    /**
     * 生产音箱
     * @return
     */
    @Override
    public Isound sound() {
        return new HWIsound();
    }

    /**
     * 生产电脑
     * @return
     */
    @Override
    public IComputer computer() {
        return new HWComputer();
    }
}

创建类别抽象 电脑、电视、音箱 三个接口,每个接口有各自抽象方法,如电脑有:启动、办公、游戏
取其中一个为例

package electric.abstrProduct.productClass;


/**
 * 产品抽象将品牌下电器种类抽象
 * 如:联想、苹果等都电脑、电视、音响
 * 他们所拥有的功能
 */

/**
 * 电脑类抽象
 */
public interface IComputer {

    //开机
    public void run();

    //办公
    public void work();

    //打游戏
    public void playTheGame();
}

创建类别的实现,实现抽象方法。
取一个为例:

package electric.abstrProduct.productClass;


/**
 * 华为电脑
 */
public class HWComputer implements IComputer{

    /**
     * 启动
     *
     */
    @Override
    public void run() {
        System.out.println("华为电脑启动");
    }

    /**
     * 华为电脑办公
     */
    @Override
    public void work() {
        System.out.println("华为电脑办公");
    }

    /**
     * 华为电脑打游戏
     */
    @Override
    public void playTheGame() {
        System.out.println("华为电脑游戏");
    }
}

调用接口:如:需要华为电脑则首先创建华为工厂实现,调用华为电脑的接口,然后可以自行选择启动方法,还是办公或者游戏方法。

package electric;

import electric.abstrProduct.productClass.IComputer;
import electric.abstrProduct.productClass.Isound;
import electric.abstrProduct.productClass.Itelevision;

/**
 * 调用工厂
 */
public class main {

    public static void main(String[] str){
        //创建联想工厂实现
        IFactory factory = new LXFactory();
        //生产联想电脑工厂   返回值为电脑的抽象
        IComputer computer = factory.computer();
        //联想工厂电脑启动
        computer.run();
        //联想电脑办公
        computer.work();
        //联想电脑游戏
        computer.playTheGame();
        //生产联想音箱工厂   返回值音箱的抽象
        Isound sound = factory.sound();
        //音箱播放音乐
        sound.playMusic();

        //创建苹果工厂实现
        IFactory pgFactory = new PGFactory();
        //生产苹果电视   返回值为电视的抽象
        Itelevision television = pgFactory.television();
        //苹果电视启动
        television.run();
        //苹果电视播放电视剧
        television.TVPlay();

        //创建华为工厂实现
        IFactory hwFactory = new HWFactory();
        //生产华为电脑工厂   返回值为电脑的抽象
        IComputer hwComputer = hwFactory.computer();
        //华为电脑启动
        hwComputer.run();
        //华为电脑办公
        hwComputer.work();
    }


}

猜你喜欢

转载自blog.csdn.net/weixin_42563880/article/details/89474414