工厂方法模式(笔记)
来源:互联网 发布:微信地理位置伪装软件 编辑:程序博客网 时间:2024/05/22 06:35
定义:
工厂方法模式同样属于类的创建型模式,又名多态工厂模式,定义一个创建产品对象的工厂接口,将实际的创建工作推迟到子类中去。
主要角色及UML:
抽象工厂角色:Creator 工厂方法模式的核心,与应用程序无关
具体工厂角色:ConcreteCreator 具体工厂类,包含与应用程序相关的逻辑,并受到应用程序的调用以创建产品
抽象产品角色:Product 工厂方法所创建对象的超类
具体产品角色:ConcreteProduct 实现里抽象产品角色定义的接口
源代码如下:
// 抽象工厂角色package com.pattern.factorymethod;public interface Creator{ public Product createProduct();}
// 具体工厂类Apackage com.pattern.factorymethod;public class ConcreateCreatorA implements Creator{ public Product createProduct(){ return new ConcreateProductA();}}
// 具体工厂类Bpackage com.pattern.factorymethod;public class ConcreateCreatorB implements Creator{ public Product createProduct(){ return new ConcreateProductB();}
// 抽象产品package com.pattern.factorymethod;public interface Product{ public void say();}
// 具体产品Apackage com.pattern.factorymethod;public class ConcreateProductA implements Product{ public void say(){ System.out.println("具体产品A");}}
// 具体产品Bpackage com.pattern.factorymethod;public class ConcreateProductB implements Product{ public void say(){ System.out.println("具体产品B");}}
// 客户端测试类package com.pattern.factorymethod;public class Client{ public static void main(String []args){ Creator ctA = new ConcreateCreatorA(); Product pA = ctA.createProduct(); pA.say(); Creator ctB = new ConcreateCreatorA(); Product pB = ctB.createProduct(); pB.say(); }}
结果:
具体产品A
具体产品B
优缺点:
优点:工厂方法类的核心是一个抽象工厂类,所有具体的工厂类都必须实现这个接口。当系统扩展需要添加新的产品对象时,仅仅需要添加一个具体对象以及一个具体工厂对象,原有工厂对象不需要进行任何修改,也不需要修改客户端,这就很好的符合了“开放-封闭”原则。
缺点:使用工厂方法模式的时候,客户端需要决定实例化哪一个具体的工厂。也就是说工厂方法法模式把简单工厂模式的内部判断逻辑转移到了客户端代码。而且使用该模式需要增加额外的代码,这就导致工作量的增加。
0 0
- 工厂方法模式(笔记)
- 工厂方法模式笔记
- 工厂方法模式--学习笔记
- 2.工厂模式(简单工厂模式,工厂方法模式,抽象工厂模式)(设计模式笔记)
- 【设计模式】工厂方法模式学习笔记
- 大话设计模式笔记----工厂方法模式
- 设计模式笔记之---工厂方法模式
- 设计模式笔记--工厂方法模式
- 设计模式学习笔记-工厂方法模式
- 设计模式笔记之工厂方法模式
- 设计模式学习笔记--工厂方法模式
- 设计模式学习笔记-工厂方法模式
- 设计模式笔记--工厂方法模式
- Android 设计模式 笔记 - 工厂方法模式
- 66.设计模式笔记-工厂方法模式
- 笔记十三:设计模式之简单工厂模式、工厂方法模式、抽象工厂模式
- 设计模式学习笔记——简单工厂模式、工厂方法模式、抽象工厂模式
- 工厂模式 -- 工厂方法
- 如何在windows下Apache环境开启htaccess伪静态功能
- 2014开工随记
- 《深入探索C++对象模型》读后感
- Object C中文件后缀名
- Android动画 fillAfter和fillBefore
- 工厂方法模式(笔记)
- 数组逆序输出
- 微信红包算个毛 ——微信红包,仅仅是个游戏?!
- Plus One
- html5实现多文件的上传
- iOS App进入后台获取更多的运行时间
- 开灯问题
- LeetCode Word Break 解题报告
- 一位蜗牛程序员六年工作总结-2013