设计模式之工厂模式

简单工厂模式

定义

简单工厂模式是一个工厂对象决定创建出哪一种产品类的实例。它存在的目的很简单:定义一个创建对象的接口。

结构

1.工厂类角色:这是本模式的核心,含有一定的商业逻辑和判断逻辑。在java中它往往由一个具体类实现。
2.抽象产品角色:它一般是具体产品继承的父类或者实现的接口。在java中由接口或者抽象类来实现。
3.具体产品角色:工厂类所创建的对象就是此角色的实例。在java中由一个具体类实现。

简单例子

//抽象产品角色
public interface Fruit {
    void name();
}
//具体产品角色
class Apple implements Fruit{
	public void name(){
		System.out.Println("apple");
	}
}
class Banana implements Fruit{
	public void name(){
		System.out.Println("banana");
	}
}
//工厂对象
class FruitFactory{
	public static Fruit getFruit(String name){
		if(name.equals("apple"){
			return new Apple();
		}else if(name.equals("banana")){
			return new Banana();
		}
		return null;
	}
}

优缺点

  • 优点:能根据用户的条件动态创建对象.
  • 缺点:当需要增加一种产品时,需要在工厂类添加对应的逻辑,不符合开闭原则.

工厂方法模式

定义一个创建对象的接口,由子类决定实例化哪个对象,将对象的实例化延迟到子类实现

结构

1.抽象工厂:提供创建产品的接口
2.具体工厂:实现抽象工厂的抽象方法,完成对产品的创建
3.抽象产品:定义产品的规范
4.具体产品:实现了抽象产品所定义的接口,由具体工厂来创建,与具体工厂是一对一的关系

实现

//抽象产品角色
public interface Fruit {
    void name();
}
//具体产品角色
class Apple implements Fruit{
	public void name(){
		System.out.Println("apple");
	}
}
class Banana implements Fruit{
	public void name(){
		System.out.Println("banana");
	}
}
//抽象工厂
interface FruitFactory{
	Fruit getFruit();
}
//具体工厂
class AppleFactory implements FruitFactory{
	public Fruit getFruit(){
		return new Apple();
	}
}
class BananaFactory implements FruitFactory{
	public Fruit getFruit(){
		return new Banana();
	}
}

优缺点

优点

  • 用户只需要知道具体工厂的名称即可以得到需要的产品,无需知道产品的创建过程
  • 添加产品时只需要添加具体产品和具体工厂类,无需对原工厂做修改,满足开闭原则

缺点

  • 每增加一个产品就需要增加一个具体产品和具体工厂,增加了系统的复杂度

抽象工厂模式

工厂方法模式中考虑的是一类产品的生产,如畜牧场只养动物、电视机厂只生产电视机、计算机软件学院只培养计算机软件专业的学生等。

定义

抽象工厂模式考虑多等级产品的生产

在这里插入图片描述

结构

1.抽象工厂:提供了创建产品的接口,,可以创建多个不同等级的产品。
2.具体工厂:主要是实现抽象工厂中的多个抽象方法,完成具体产品的创建,生产同一产品族的产品
3.抽象产品:定义了产品的规范,描述了产品的主要特性和功能,定义同一级别产品的规范
4.具体产品:实现了抽象产品角色所定义的接口,由具体工厂来创建,它同具体工厂之间是多对一的关系。

实现

//抽象产品
interface phone{	
}
interface Computer{
}
//具体产品
class HuaWeiPhone implements Phone{
}
class HuaWeiComputer implements Computer{
}
class XiaoMiPhone implements Phone{
}
class XiaoMiComputer implements Computer{
}

//抽象工厂
interface ProductFactory{
	Phone producePhone();
	Computer produceComputer();
}
//具体工厂
class  HuaWeiFactory{
	public Phone producePhone(){
		return new HuaWeiPhone();
	}
	public Computer produceComputer(){
		return new HuaWeiComputer();
	}
}
class  XiaoMiFactory{
	public Phone producePhone(){
		return new XiaoMiPhone();
	}
	public XiaoMi produceComputer(){
		return new XiaoMiComputer();
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值