设计模式之工厂方法模式学习笔记
发布日期:2021-05-06 23:31:32 浏览次数:27 分类:精选文章

本文共 1653 字,大约阅读时间需要 5 分钟。

定义

定义一个用于创建对象的接口,让子类去决定是实现哪个类。工厂方法使类的实例化,延迟到了子类。

结构图

在这里插入图片描述角色拆解分析:

1.Product:抽象产品类
2.ConcrereProduct:具体产品类,实现Product接口
3.Factory:抽象工厂类,返回Product类型对象
4.ConcreteFactory:具体工程类,返回ConcreteProduct实例

工厂方法模式实现

1.抽象产品类ProductX(父类)

public abstract class Computer{       //产品的抽象方法    public abstract void start();}

2.具体产品类Product

//美帝良心想public class LenovoComputer extends Computer {       @Override    public void start() {           System.out.print("美帝良心想启动了");    }}

3.抽象工厂Factory

public abstract class ComputerFactory {       public abstract 
T createComputer(Class
clz);//创建电脑方法}

4.具体工厂

富土康是一个具体工厂,继承抽象工厂,通过反射来计算不同厂家的计算机

public class FoxconnFactory extends ComputerFactory {       @Override    public 
T createComputer(Class
clz) { Computer computer = null; String name = clz.getName(); try { //反射来生成不同厂家的计算机 computer = (Computer)Class.forName(name).newInstance(); }catch (Exception e){ e.printStackTrace(); } return (T) computer; }}

5.客户端调用

客户端创建具体工厂对象,来生成美帝良心想、铁板熊掌普…

public class UserClient {       public static void main(String [] args){           ComputerFactory computerFactory = new FoxconnFactory();        //生成美帝良心想        LenovoComputer lenovoComputer = computerFactory.createComputer(LenovoComputer.class);        lenovoComputer.start();		//生成铁板熊掌普        HpComputer hpComputer = computerFactory.createComputer(HpComputer.class);        hpComputer.start();    }}

对比简单工厂

的工厂类中都包含了必要的逻辑判断,根据不同的条件来动态的实例化相关的类。站在用户的角度,这去除了与具体产品的依赖。但是也有弊端,如果我要生成Mac笔记本,就要在工厂类增加case分类,违背了开放封闭原则。

而工厂模式就没有违背开放封闭原则,我想生成Mac,不用修改工厂类,直接去创建生成就好了。

上一篇:ssm截图笔记
下一篇:动态sql+sql片段的例子

发表评论

最新留言

逛到本站,mark一下
[***.202.152.39]2025年04月16日 06时44分58秒