简单工厂~工厂模式--Java实现

设计模式在之前学习过,但是因为对于代码还不够熟悉,对于UML图的理解也不是很到位,而且UML图应用到代码中也是稀里糊涂的,所以应用时还需要再次学习设计模式。链接《工厂比较》

上篇博客概念和UML图分析比较多,这次主要就是在代码上的实现


简单工厂


例子:一个人要去餐馆可以吃饭喝饮料,餐馆就是做要创建对象的父类,米饭、饮料就是具体子类对象,简单工厂模式是核心,通过它来创建实例。UML图如下:


    


Restaurant:创建实例的父类或接口


/*
 * 所有实例公共接口或父类
 */
public abstract class Restaurant {
	public abstract void doing();
}

Eat和Drink:Restaurant的具体实现类


/*
 * 创建的具体子类
 */
public class Eat extends Restaurant{
	@Override
	public void doing() {
		System.out.println("吃米饭");
	}
}


public class Drink extends Restaurant{
	@Override
	public void doing() {
		System.out.println("喝饮料");
	}
}

简单工厂:创建所有实例的内部逻辑


/*
 * 简单工厂:根据传入参数创建具体子类实现类
 */
public class SimpleFactory {
	public Restaurant createRestaurant(String type){
		switch(type){
		case "吃":
			return new Eat();
		case "喝":
			return new Drink();
		default:
			break;
		}
		return null;
	}
}

Demo:创建实例,调用方法


public class demo {
	public static void main(String[] args) {
		//创建简单工厂对象
		SimpleFactory simpleFactory=new SimpleFactory();
		//调用工厂对象中的方法并传参"吃",返回为Restaurant对象
		Restaurant createRestaurant = simpleFactory.createRestaurant("吃");
		//Restaurant对象调用本身方法
		createRestaurant.doing();
	}
}

控制台上输出:


  

由此我们可以看到简单工厂就是解耦合的,动态的实例化不同的对象,但是当需要一个新实现类时,需要修改工厂中的内容,这个符合我们的开放-封闭原则。于是引出工厂方法模式。


工厂方法


    


FactoryMethod:定义工厂抽象类


/*
 * 定义抽象工厂
 */
public abstract class FactoryMethod {
	public abstract Restaurant createRestaurant();
}


EatFactory、DrinkFactory:定义具体工厂方法


/*
 * EatFactory:定义具体工厂方法
 */
public class EatFactory extends FactoryMethod {
	@Override
	public Restaurant createRestaurant() {
		return new Eat() ;
	}
}


/*
 * DrinkFactory:定义具体工厂方法
 */
public class DrinkFactory extends FactoryMethod{
	@Override
	public Restaurant createRestaurant() {
		return new Drink();
	}
}

Demo:应用多态,创建实例,调用方法


public class demo {
	public static void main(String[] args) {
		//多态:创建EatFactory()对象
		FactoryMethod eatFactory = new EatFactory();
		//多态:EatFactory调用方法创建Restaurant对象
		Restaurant createRestaurant = eatFactory.createRestaurant();
		//具体实现类调用方法
		createRestaurant.doing();
	}
}

控制台显示:


   

由此可知工厂模式当需要增加如:唱歌时,可以直接增加一个唱歌工厂和一个唱歌实现类,这样就满足了工厂的开放封闭原则。


工厂方法其实就是简单工厂的升级版本的,让接口依赖接口,抽象类依赖于抽象类,所有实现类的实现都是由具体工厂去创建对象,调用方法实现。最后还是得多实践。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值