百战不败, 依不自称常胜, 百败不颓, 依能奋力前行.-- 这才是真正的堪称强大!!
工厂模式
工厂模式分为三种类型: 简单工厂, 工厂方法, 抽象工厂; 是我们最常使用的实例化对象模型, 是工厂方法代替 new 操作的一种模式. 在 spring 原码中亦有用到, 如 BeanFactory. 三种模式当中简单工厂又叫做静态工厂方法 (StaticFactory Method) 模式, 但不属于 23 种设计模式之一.
准备一份几种工厂模式通用的实体, 以便后面每一次都使用, 更能够展现每一种工厂模式的区别
- public interface Phone {
- }
- public class HuaWei implements Phone {
- }
- public class iPhone implements Phone {
- }
- public class XiaoMi implements Phone {
- }
简单工厂
简单工厂模式的实质是由一个工厂类根据传入的参数, 动态决定应该创建哪一个产品类. 它的优点就是能够根据一个批量生产对象, 对于用于操作更简单, 避免了用户直接去进行 new 的动作, 同时它也是其它两种模式的思想模型. 相对而言, 简单工厂模式, 传入参数也是一个缺点, 不能够直接去选择生产什么对象.
代码演示
- // 简单工厂
- public class SimpleFactory {
- public static Phone test(String name) {
- if ("XiaoMi".equals(name)) {
- return new XiaoMi();
- } else if ("IPhone".equals(name)) {
- return new iPhone();
- } else if ("HuaWei".equals(name)) {
- return new HuaWei();
- } else {
- System.out.println("未识别的类型");
- return null;
- }
- }
- }
- // 对工厂进行测试
- public class TestSimpleFactory {
- public static void main(String[] args){
- System.out.println(SimpleFactory.test("XiaoMi"));
- }
- }
工厂方法
采用工厂模式, 对象的创建及初始化职责交给工厂对象. 每一个实体必须要对应一个工厂, 这样能够有效的分离对象的创建和使用. 和简单工厂来相比, 进一步的面向用户对创建实现过程进行了隐藏. 但是每一个实体要去对应一个工厂, 这样的做法会使实体增多的时候, 对应的工厂也需要不断增加.
- // 工厂方法接口
- public interface MethodFactory {
- Phone getPhone();
- }
- // 工厂方法的实现
- public class HuaWeiFactory implements MethodFactory {
- @Override
- public Phone getPhone() {
- return new HuaWei();
- }
- }
- public class IPhoneFactory implements MethodFactory {
- @Override
- public Phone getPhone() {
- return new iPhone();
- }
- }
- public class XiaoMiFactory implements MethodFactory {
- @Override
- public Phone getPhone() {
- return new XiaoMi();
- }
- }
- // 测试工厂方法
- public class TestMethodFactory {
- public static void main(String[] args) {
- MethodFactory methodFactory = new HuaWeiFactory();
- System.out.println(methodFactory.getPhone());
- methodFactory = new IPhoneFactory();
- System.out.println(methodFactory.getPhone());
- methodFactory = new XiaoMiFactory();
- System.out.println(methodFactory.getPhone());
- }
- }
抽象工厂
抽象工厂模式 (Abstract FactoryPattern) 是围绕一个超级工厂创建其他工厂. 该超级工厂又称为其他工厂的工厂. 这种类型的设计模式属于创建型模式, 它提供了一种创建对象的最佳方式.
- // 抽象工厂
- public abstract class AbstractFactory {
- public abstract Phone getIPhone();
- public abstract Phone getHuaWei();
- public abstract Phone getXiaoMi();
- }
- // 抽象工厂实现
- public class PhoneFactory extends AbstractFactory{
- @Override
- public Phone getIPhone() {
- return new iPhone();
- }
- @Override
- public Phone getHuaWei() {
- return new HuaWei();
- }
- @Override
- public Phone getXiaoMi() {
- return new XiaoMi();
- }
- }
- // 测试抽象工厂
- public class TestAbstractFactory {
- public static void main(String[] args) {
- PhoneFactory phoneFactory = new PhoneFactory();
- System.out.println(phoneFactory.getHuaWei());
- }
- }
代码地址: https://git.coding.net/xlsorry/Demo.git
来源: http://www.bubuko.com/infodetail-3112670.html