JAVA学习笔记(四)关于工厂设计模式

本文参考自《大话设计模式》《图解设计模式》,工厂方法实际上包括简单工厂(静态工厂)、普通工厂、抽象工厂三种设计模式,主要用来避免直接用new关键字生成类的实例,下面进行一一讲解:

简单工厂

最简单的工厂模式,用于生成某个类的实例,例如我们常见到如下代码:

Fragment fragment = MyFragment.newIntance();
    // or 
    Calendar calendar = Calendar.getInstance();
    // or 
    Integer number = Integer.valueOf("3");

像这样不用new而是使用类中提供的静态方法构造对象的设计模式称为
静态工厂
静态工厂的一大优点就是可以根据传入的参数确定返回的类型:

class Father {
	private Father() {
	}
 
	public static Father newInstance(String type) {
		if (type.equals("ChildA")) { // 根据类型判断返回那个子类对象
			return new ChildA();
		} else {
			return new ChildB();
		}
	}
 
	public void getName() { 
		System.out.println("My name is father");
	}
 
	private static class ChildA extends Father {
		public void getName() { 
			System.out.println("My name is child A");
		}
	}
 
	private static class ChildB extends Father {
		public void getName() {
			System.out.println("My name is child B");
		}
	}
}

但是简单工厂违反了开闭原则,也就是当客户端需要更多的类型时(例如ChildC),只能通过修改newInstance方法来满足需求。

工厂方法

简单工厂在类中定义了创建对象的静态方法,而工厂方法则定义了创建对象的类(工厂类)
先看工厂方法的UML类图:
在这里插入图片描述
其中Creator中包含了生产抽象产品Product的方法create(create通过调用factoryMethod获得实例,还可以对其进行处理),在子类ConcreteCreator中可通过重写factoryMethod返回具体的产品ConcreteProduct。
下面通过一个例子说明工厂模式:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述在这里插入图片描述
Factory规定了制作抽象产品的流程(获得实例->注册->返回),抽象产品规定了自己具有的方法(use),因此具体工厂和具体类都应该满足要求。
工厂模式是简单工厂的进一步抽象和推广,克服了简单工厂违反开闭原则的缺点,又保持了封装对象创建过程的优点,缺点是每增加一个产品就要增加一个工厂类,增加了额外的开发量

抽象工厂

抽象工厂方法是工厂方法的一种推广,工厂方法只能用于生产一种产品,而抽象工厂则规定了生产多种产品的接口:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值