初学抽象工厂
注:所有设计模式翻译某位老师讲解的视频内容(个别内容不是 如:枚举)
重:单纯记录供自己使用
联想、苹果、华为 三个品牌
每个品牌下有:
电脑、电视、音箱 三种类别电器
步骤及思路:
简单工厂:将工厂创建逻辑写入工厂类内部,直接调用工厂类。
根据请求参数不同创建不同工厂对象。
抽象工厂:
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();
}
}