Java设计模式-工厂模式的详细记录

    技术2022-07-11  94

    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(); } }
    Processed: 0.010, SQL: 9