23种设计模式_MODE03抽象工厂模式_手写代码实现

23种设计模式_MODE03抽象工厂模式_手写代码实现_第1张图片

1.抽象工厂测试 == 具体工厂类实现不同电脑组件的生产

package com.zhaoshuangjian.mode03_抽象工厂模式;


import com.zhaoshuangjian.mode03_抽象工厂模式.abstractfactory.LianXiang01Factory;
import com.zhaoshuangjian.mode03_抽象工厂模式.abstractfactory.LianXiang02Factory;
import com.zhaoshuangjian.mode03_抽象工厂模式.mode03.ProduceKeyBord;
import com.zhaoshuangjian.mode03_抽象工厂模式.mode03.ProduceMouse;

/**
 * 

抽象工厂测试 == 具体工厂类实现不同电脑组件的生产

* * @Author zhaoshuangjian 2023-03-23 下午1:37 * * * 工厂方法模式: * 一个抽象产品类,可以派生出多个具体产品类。 * 一个抽象工厂类,可以派生出多个具体工厂类。 * 每个具体工厂类只能创建一个具体产品类的实例。 * * 抽象工厂模式: * 多个抽象产品类,每个抽象产品类可以派生出多个具体产品类。 * 一个抽象工厂类,可以派生出多个具体工厂类。 * 每个具体工厂类可以创建多个具体产品类的实例,也就是创建的是一个产品线下的多个产品。 * * 区别: * 工厂方法模式只有一个抽象产品类,而抽象工厂模式有多个。 * 工厂方法模式的具体工厂类只能创建一个具体产品类的实例,而抽象工厂模式可以创建多个。 * ===================================================================== * 工厂方法创建 "一种" 产品,他的着重点在于"怎么创建",也就是说如果你开发, * 你的代码很可能大部分都放在了产品的构造和初始化这些细节上面。也因为如此, * 类似的产品之间有很多可以复用的特征,所以会和模版方法相随。 * * 抽象工厂需要创建一系列产品,着重点在于"创建哪些"产品上,也就是说,如果你开发, * 你的主要任务是划分不同差异的产品线,并且尽量保持每条产品线接口一致,从而可以从同一个抽象工厂继承。 * */ public class AbstractFactoryTest { public static void main(String[] args) { // 用户需要购买联想的电脑,但要求键盘和鼠标都是雷柏的,于是便找到了对应的01电脑组装工厂进行生产 LianXiang01Factory lianXiang01Factory = new LianXiang01Factory(); ProduceKeyBord keybord1 = lianXiang01Factory.createKeyBord(); keybord1.produceKeyBord("M550", "黑色"); ProduceMouse Mouse1 = lianXiang01Factory.createMouse(); Mouse1.produceMouse("M590", "有线"); System.out.println("=======================分割线,注意区别"); // 用户需要购买联想的电脑,但要求键盘是雷柏的,鼠标是罗技的,于是便找到了对应的02电脑组装工厂进行生产 LianXiang02Factory lianXiang02Factory = new LianXiang02Factory(); ProduceKeyBord keybord2 = lianXiang02Factory.createKeyBord(); keybord2.produceKeyBord("M550", "黑色"); ProduceMouse Mouse2 = lianXiang02Factory.createMouse(); Mouse2.produceMouse("M590", "无线"); /** * 好处:横向扩展很容易,如果我需要再增加一个电脑型号的生产线,比如HP【惠普】,只需要在创建一个对应的工厂实现抽象工厂即可 * 坏处:纵向扩展很麻烦,如果我需要增加显示器的生产接口,那么改动的地方就太多了,自己领会吧,可以尝试一下 */ } }

2.联想电脑生产商 == 电脑型号01【固定键盘和鼠标生产商】

package com.zhaoshuangjian.mode03_抽象工厂模式.abstractfactory;

import com.zhaoshuangjian.mode03_抽象工厂模式.KeyBoard.LeiBoKeyBord;
import com.zhaoshuangjian.mode03_抽象工厂模式.Mouse.LeiBoMouse;
import com.zhaoshuangjian.mode03_抽象工厂模式.mode03.ComputerAbstractFactory;
import com.zhaoshuangjian.mode03_抽象工厂模式.mode03.ProduceKeyBord;
import com.zhaoshuangjian.mode03_抽象工厂模式.mode03.ProduceMouse;

/**
 * 

联想电脑生产商 == 电脑型号01【固定键盘和鼠标生产商】

* * @Author zhaoshuangjian 2023-03-23 下午1:37 */ public class LianXiang01Factory implements ComputerAbstractFactory { @Override public ProduceKeyBord createKeyBord() { // 使用雷柏的键盘 return new LeiBoKeyBord(); } @Override public ProduceMouse createMouse() { // 使用雷柏的鼠标 return new LeiBoMouse(); } }

3.联想电脑生产商 == 电脑型号:02【固定键盘和鼠标生产商】

package com.zhaoshuangjian.mode03_抽象工厂模式.abstractfactory;


import com.zhaoshuangjian.mode03_抽象工厂模式.KeyBoard.LeiBoKeyBord;
import com.zhaoshuangjian.mode03_抽象工厂模式.Mouse.LuoJiMouse;
import com.zhaoshuangjian.mode03_抽象工厂模式.mode03.ComputerAbstractFactory;
import com.zhaoshuangjian.mode03_抽象工厂模式.mode03.ProduceKeyBord;
import com.zhaoshuangjian.mode03_抽象工厂模式.mode03.ProduceMouse;

/**
 * 

联想电脑生产商 == 电脑型号:02【固定键盘和鼠标生产商】

* * @Author zhaoshuangjian 2023-03-23 下午1:37 */ public class LianXiang02Factory implements ComputerAbstractFactory { @Override public ProduceKeyBord createKeyBord() { // 使用雷柏的键盘 return new LeiBoKeyBord(); } @Override public ProduceMouse createMouse() { // 使用罗技的鼠标 return new LuoJiMouse(); } }

4.雷柏(Rapoo)键盘生产商

package com.zhaoshuangjian.mode03_抽象工厂模式.KeyBoard;


import com.zhaoshuangjian.mode03_抽象工厂模式.mode03.ProduceKeyBord;

/**
 * 

雷柏(Rapoo)键盘生产商

* * @Author zhaoshuangjian 2023-03-23 下午1:37 */ public class LeiBoKeyBord implements ProduceKeyBord { @Override public void produceKeyBord(String name, String color) { System.out.println("雷柏键盘 -- "+name+","+color); } }

5.罗技(G)键盘生产商

package com.zhaoshuangjian.mode03_抽象工厂模式.KeyBoard;


import com.zhaoshuangjian.mode03_抽象工厂模式.mode03.ProduceKeyBord;

/**
 * 

罗技(G)键盘生产商

* * @Author zhaoshuangjian 2023-03-23 下午1:37 */ public class LuoJiKeyBord implements ProduceKeyBord { @Override public void produceKeyBord(String name, String color) { System.out.println("罗技键盘 -- "+name+","+color); } }

6.computer抽象工厂接口-只提供电脑组件的组装,具体组装成什么样的型号的电脑,再由具体工厂类决定

package com.zhaoshuangjian.mode03_抽象工厂模式.mode03;

/**
 * computer抽象工厂接口-只提供电脑组件的组装,具体组装成什么样的型号的电脑,再由具体工厂类决定
 *
 * @Auther: zhaoshuangjian  2023-03-23 下午1:37
 */
public abstract interface ComputerAbstractFactory {
    ProduceKeyBord createKeyBord();
    ProduceMouse createMouse();
}

7.键盘接口 – 生产键盘

package com.zhaoshuangjian.mode03_抽象工厂模式.mode03;

/**
 * 

键盘接口 -- 生产键盘

* * @Author zhaoshuangjian 2023-03-23 下午1:37 */ public interface ProduceKeyBord { /** * 约定键盘生产的规格数据 * @param name 名称 * @param color 颜色 */ public void produceKeyBord(String name,String color); }

8.鼠标接口 – 生产鼠标

package com.zhaoshuangjian.mode03_抽象工厂模式.mode03;

/**
 * 

鼠标接口 -- 生产鼠标

* * @Author zhaoshuangjian 2023-03-23 下午1:37 */ public interface ProduceMouse { /** * 约定鼠标生产的规格数据 * @param name 名称 * @param type 类型 */ public void produceMouse(String name,String type); }

9.雷柏(Rapoo)鼠标生产商

package com.zhaoshuangjian.mode03_抽象工厂模式.Mouse;


import com.zhaoshuangjian.mode03_抽象工厂模式.mode03.ProduceMouse;

/**
 * 

雷柏(Rapoo)鼠标生产商

* * @Author zhaoshuangjian 2023-03-23 下午1:37 */ public class LeiBoMouse implements ProduceMouse { @Override public void produceMouse(String name, String type) { System.out.println("雷柏鼠标 -- "+name+","+type); } }

10.罗技(G)鼠标生产商

package com.zhaoshuangjian.mode03_抽象工厂模式.Mouse;


import com.zhaoshuangjian.mode03_抽象工厂模式.mode03.ProduceMouse;

/**
 * 

罗技(G)鼠标生产商

* * @Author zhaoshuangjian 2023-03-23 下午1:37 */ public class LuoJiMouse implements ProduceMouse { @Override public void produceMouse(String name, String type) { System.out.println("罗技鼠标 -- "+name+","+type); } }

你可能感兴趣的:(三,设计模式,设计模式,抽象工厂模式,java)