韩敬海 设计模式(Java版) (一)定义 定义一个创建对象的接口,让子类决定实例化哪个类。工厂方法使一个类的实例化延迟到其子类。 工厂方法涉及的角色有: 1 .抽象工厂角色:工厂方法模式的核心,与应用系统无关,任何创建对象的工厂类必
韩敬海 设计模式(Java版)
定义一个创建对象的接口,让子类决定实例化哪个类。工厂方法使一个类的实例化延迟到其子类。
工厂方法涉及的角色有:
1 .抽象工厂角色:工厂方法模式的核心,与应用系统无关,任何创建对象的工厂类必须实现这个接口。
2. 具体工厂角色:实现了抽象工厂接口,被应用程序调用以创建产品对象。
3. 抽象产品角色:定义产品的共性,实现对产品抽象的定义。
4. 具体产品角色:实现抽象产品角色所声明的接口。
package com.xiaobai.design_pattern.factorymethod.createrole;import com.xiaobai.design_pattern.factorymethod.productrole.Cake;public interface Creator { Cake factory();}
package com.xiaobai.design_pattern.factorymethod.productrole;public interface Cake { void make();}
package com.xiaobai.design_pattern.factorymethod.createrole;import com.xiaobai.design_pattern.factorymethod.productrole.AppleCake;import com.xiaobai.design_pattern.factorymethod.productrole.Cake;public class AppleCakeCreator implements Creator{ @Override public Cake factory() { return new AppleCake(); }}
package com.xiaobai.design_pattern.factorymethod.createrole;import com.xiaobai.design_pattern.factorymethod.productrole.Cake;import com.xiaobai.design_pattern.factorymethod.productrole.StrawberryCake;public class StrawberryCakeCreator implements Creator{ @Override public Cake factory() { return new StrawberryCake(); }}
package com.xiaobai.design_pattern.factorymethod.productrole;import lombok.extern.slf4j.Slf4j;@Slf4jpublic class AppleCake implements Cake{ @Override public void make() { log.info("正在制作苹果蛋糕"); }}
package com.xiaobai.design_pattern.factorymethod.productrole;import lombok.extern.slf4j.Slf4j;@Slf4jpublic class StrawberryCake implements Cake { @Override public void make() { log.info("正在制作草莓蛋糕"); }}
package com.xiaobai.design_pattern.factorymethod;import com.xiaobai.design_pattern.factorymethod.createrole.AppleCakeCreator;import com.xiaobai.design_pattern.factorymethod.createrole.Creator;import com.xiaobai.design_pattern.factorymethod.createrole.StrawberryCakeCreator;import com.xiaobai.design_pattern.factorymethod.productrole.AppleCake;import com.xiaobai.design_pattern.factorymethod.productrole.Cake;import org.junit.jupiter.api.Test;public class FactoryMethodTest { @Test public void test() { // 草莓蛋糕生成 Creator creator1 = new StrawberryCakeCreator(); Cake strawberryCake = creator1.factory(); strawberryCake.make(); // 苹果蛋糕生成 Creator creator2 = new AppleCakeCreator(); Cake appleCake = creator2.factory(); appleCake.make(); }}
输出:
45.924 [main] INFO com.xiaobai.design_pattern.factorymethod.productrole.StrawberryCake - 正在制作草莓蛋糕
22:58:45.929 [main] INFO com.xiaobai.design_pattern.factorymethod.productrole.AppleCake - 正在制作苹果蛋糕
(1)提高扩展性:在增加产品类的情况下,只要适当调整具体的工厂类或扩展一个工厂类,就可以适应变化。
(2)调用者不需要关心产品的具体实现,只需要关注产品的接口是否发生变化,因为产品的实例化是由工厂负责的。
(3)解耦:高层模块只需要知道产品的抽象类,不需要关注产品的实现类,符合迪米特法则、依赖倒置原则、里氏替换原则。
来源地址:https://blog.csdn.net/qq_39464523/article/details/132032194
--结束END--
本文标题: 工厂方法模式介绍
本文链接: https://www.lsjlt.com/news/383282.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
下载Word文档到电脑,方便收藏和打印~
2024-03-01
2024-03-01
2024-03-01
2024-03-01
2024-03-01
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0