
设计模式之工厂方法模式学习笔记
发布日期:2021-05-06 23:31:32
浏览次数:27
分类:精选文章
本文共 1653 字,大约阅读时间需要 5 分钟。
定义
定义一个用于创建对象的接口,让子类去决定是实现哪个类。工厂方法使类的实例化,延迟到了子类。
结构图
角色拆解分析:
工厂方法模式实现
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 abstractT createComputer(Class clz);//创建电脑方法}
4.具体工厂
富土康是一个具体工厂,继承抽象工厂,通过反射来计算不同厂家的计算机
public class FoxconnFactory extends ComputerFactory { @Override publicT 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,不用修改工厂类,直接去创建生成就好了。发表评论
最新留言
逛到本站,mark一下
[***.202.152.39]2025年04月16日 06时44分58秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
上周热点回顾(2.16-2.22)
2019-03-06
上周热点回顾(3.2-3.8)
2019-03-06
.NET跨平台之旅:借助ASP.NET 5 Beta5的新特性显示CLR与操作系统信息
2019-03-06
上周热点回顾(7.27-8.2)
2019-03-06
上周热点回顾(9.28-10.4)
2019-03-06
上周热点回顾(5.2-5.8)
2019-03-06
上周热点回顾(5.9-5.15)
2019-03-06
上周热点回顾(8.8-8.14)
2019-03-06
.NET跨平台之旅:将示例站点升级至 .NET Core 1.1 Preview 1
2019-03-06
上周热点回顾(1.16-1.22)
2019-03-06
上周热点回顾(1.23-1.29)
2019-03-06
上周热点回顾(3.20-3.26)
2019-03-06
上周热点回顾(4.24-4.30)
2019-03-06
[故障公告]博客站点1台负载均衡遭遇流量攻击,造成联通与移动用户无法正常访问
2019-03-06
上周热点回顾(5.1-5.7)
2019-03-06
上周热点回顾(6.19-6.25)
2019-03-06
云计算之路-阿里云上:docker swarm 集群故障与异常
2019-03-06
上周热点回顾(2.19-2.25)
2019-03-06
云计算之路-阿里云上:博客web服务器轮番CPU 100%
2019-03-06