1. 简要介绍
- 实现了创造者和调用者的分离;详细分类:简单工厂模式,工厂方法模式,抽象工厂模式;
- 用于创建对象,实现调用者和创建者的分离;
- 将选择实现类、创建对象统一管理和控制,从而将调用者和我们的实际类解耦;
- 实例化对象,用工厂方法代替new;
2. 简单工厂
- 用于生产同一等级结构的任意产品,对于增加的新产品,需要修改已经有的代码;
- 但是简单工厂无法直接扩展后面的新产品,如果有新的产品出现,就只能修改源代码,所以这就是它最大的不足;
简单工厂实现的基本步骤:
1.先创建一个接口;
2.设置好需要创建的类;
3.在创建一个工厂类,用于生成所有需要的对象;
4.需要创建什么类就调用与之相关的方法(在工厂类中);//创建一个工厂类; public class FuctionMudel { //创建有一个方法,用于创建并返回对象 public static Game getGame(String game) { //进行比较,并且输出所需要的对象; if (game.equals("LOL")) { return new LOL(); } else if (game.equals("DNF")) { return new DNF(); } return null; } } //创建一个接口 interface Game { void design(); } //创建两个实现接口Game的类; class LOL implements Game { @Override public void design() { System.out.println("对LOL进行设计..."); } } class DNF implements Game { @Override public void design() { System.out.println("对DNF进行设计..."); } }
3. 工厂方法模式
- 与简单工厂模式不同,简单工厂模式只有一个工厂类,而工厂方法模式有一组实现了相同接口的工厂类;
- 工厂方法模式,使用之后会创建很多的类,导致管理上很复杂;简单了解即可;
//这里使用工厂方法模式;现创建一个接口工厂; public interface FunctionMethod { Game createGame(); } interface Game { void design(); } //创建两个实现接口Game的类; class LOL implements Game { @Override public void design() { System.out.println("对LOL进行设计..."); } } class DNF implements Game { @Override public void design() { System.out.println("对DNF进行设计..."); } } //创建一个LOL产品的创建工厂 class LolFunction implements FunctionMethod{ @Override public Game createGame() { return new LOL(); } }
4.抽象工厂模式
- 用来生产不同产品族的全部产品(无法增加新的产品);
- 怎么理解,我觉得就是说可以把下面的一些功能区分出来了,也就是说可以对功能进行更加灵活的设置;
基础步骤记录:
1.创建主接口(类似于最开始的某一类产品,就是概括性的产品);
2.创建接口的实体类(类似于具体的产品);
3.创建一个接口(这个接口,主要是指同一个产品族里面的另一个事物);
4.创建一个抽象类,其中创建好返回对象的抽象方法;
5.编写具体的继承这个抽象方法的类;
//主游戏板块
interface LOL {
void design();
}
//创建实现接口LOL的具体类;
class LOLMatch implements LOL {
@Override
public void design() {
System.out.println("LOL进行匹配赛...");
}
}
//另一个接口;描述一个分模块
interface ActivityLoL{
void doing();
}
//定义一个具体的类,自走棋;
class autoChess implements ActivityLoL{
@Override
public void doing() {
System.out.println("云顶之弈活动开始!");
}
}
abstract class Gamedesign{
abstract ActivityLoL getActivity();
abstract LOL getGame();
}
class LoLday extends Gamedesign{
@Override
ActivityLoL getActivity() {
return new autoChess();
}
@Override
LOL getGame() {
return new LOLMatch();
}
}