首页 > 其他分享 >设计模式回顾之十:工厂方法模式(FactoryMethod)

设计模式回顾之十:工厂方法模式(FactoryMethod)

时间:2023-09-14 13:04:34浏览次数:35  
标签:之十 void FactoryMethod System fruit println 设计模式 public out


设计模式回顾系列文章:主要针对工作中常用常见的设计模式进行整理、总结,同时分享以供大家拍砖。

------------------------------------------------

工厂方法模式(FactoryMethod)

定义一个用于创建对象的接口,让子类决定实例化哪一个类。Factory Method使一个类的实例化延迟到其子类。

适用于:

 

当一个类不知道它所必须创建的对象的类的时候,当一个类希望由它的子类来指定它所创建的对象的时候。 

 

程序实现:

接口:

public interface Fruit{
    public void grow();
    public void harvest();
    public void plant();
}

实现:

public class BigApple implements Fruit{
	private int treeAge;

	public void grow(){
		System.out.println("BigApple is growing!");
	}

	public void harvest(){
		System.out.println("BigApple has been harvested!");
	}

	public void plant(){
		System.out.println("BigApple has been planted!");
	}

	public int getTreeAge() {
		return treeAge;
	}

	public void setTreeAge(int treeAge) {
		this.treeAge = treeAge;
	}
	
}
public class BigOrange implements Fruit {
	private int number;

	public void grow() {
		System.out.println("BigOrange is growing!");
	}

	public void harvest() {
		System.out.println("BigOrange has been harvest!");
	}

	public void plant() {
		System.out.println("BigOrange has been harvest!");
	}

	public int getNumber() {
		return number;
	}

	public void setNumber(int number) {
		this.number = number;
	}

}
public class SmallApple implements Fruit{
	private int treeAge;

	public void grow(){
		System.out.println("SmallApple is growing!");
	}

	public void harvest(){
		System.out.println("SmallApple has been harvested!");
	}

	public void plant(){
		System.out.println("SmallApple has been planted!");
	}

	public int getTreeAge() {
		return treeAge;
	}

	public void setTreeAge(int treeAge) {
		this.treeAge = treeAge;
	}
	
}
public class SmallOrange implements Fruit {
	private int number;

	public void grow() {
		System.out.println("SmallOrange is growing!");
	}

	public void harvest() {
		System.out.println("SmallOrange has been harvest!");
	}

	public void plant() {
		System.out.println("SmallOrange has been harvest!");
	}

	public int getNumber() {
		return number;
	}

	public void setNumber(int number) {
		this.number = number;
	}

}

一共四种水果:大苹果、大橙子、小苹果、小橙子,下面是抽象水果工厂:

public abstract class FruitFactory {
	public abstract Fruit factory(String factory);
	
	public Fruit order(String type){
		Fruit fruit=factory(type);
		fruit.plant();
		fruit.grow();
		fruit.harvest();
		return fruit;
	}
}

具体水果工厂:

public class AppleFactory extends FruitFactory{
	public Fruit factory(String color){
		if("big".equals(color)){
			return new BigApple();
		}else if("small".equals(color)){
			return new SmallApple();
		}else{
			return null;
		}
	}
}
public class OrangeFactory extends FruitFactory{
	public Fruit factory(String type){
		if("big".equals(type)){
			return new BigOrange();
		}else if("small".equals(type)){
			return new SmallOrange();
		}else{
			return null;
		}
	}
}

最后是客户端调用代码:

public static void main(String[] args){
		FruitFactory appleFactory=new AppleFactory();
		FruitFactory orangeFactory=new OrangeFactory();
		
		Fruit fruit=appleFactory.order("big");
		System.out.println(fruit.getClass().getName()+"\n");
		
		fruit=appleFactory.order("small");
		System.out.println(fruit.getClass().getName()+"\n");
		
		fruit=orangeFactory.order("big");
		System.out.println(fruit.getClass().getName()+"\n");
		
		fruit=orangeFactory.order("small");
		System.out.println(fruit.getClass().getName()+"\n");
}

其实像IoC容器里面就大量使用了工厂模式。另外,由于现在依赖注入概念和容器的普及,需要工厂模式实现的工作其实都可以交给容器去处理了。

 

标签:之十,void,FactoryMethod,System,fruit,println,设计模式,public,out
From: https://blog.51cto.com/u_6978506/7468948

相关文章

  • 设计模式回顾之九:建造者模式(Builder)
    设计模式回顾系列文章:主要针对工作中常用常见的设计模式进行整理、总结,同时分享以供大家拍砖。------------------------------------------------建造者模式(Builder)将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 适用于:当创建复杂对象的算法应该......
  • 设计模式之:1单例模式
    1 单例模式1.1     引言单例模式就是保证在整个应用程序的生命周期中,在任何时刻,被指定的类只有一个实例,并为客户程序提供一个获取该实例的全局访问点。1.2     经典模式publicclassSingleton{privatestaticSingletoninstance;private......
  • 【设计模式】状态模式State:通过有限状态机监控功能的 "状态变化"
    (目录)状态模式的应用场景非常广泛,比如:线上购物订单、手机支付、音乐播放器、游戏、工作流引擎等场景。状态模式设计的初衷是应对同一个对象里不同状态变化时的不同行为的变化。模式原理原始定义是:允许一个对象在其内部状态改变时改变它的行为,对象看起来似乎修改了自己的......
  • 【设计模式】策略模式Strategy:解决不同活动策略营销推荐场景
    (目录)模板方法模式能帮助我们进行公有方法的抽取,起到快速复用和扩展的作用。另一种快速复用和扩展代码的行为型模式:策略模式。策略模式在实际的开发中很常用,最常见的应用场景是利用它来替换过多的if-else嵌套的逻辑判断。除此之外,还能结合工厂模式给客户端提供非常灵活的使......
  • 设计模式-观察者模式
    设计模式提供了软件开发过程中的一些最佳实践,可以帮助我们解决常见的编程问题,提高软件的可维护性和可复用性,并使我们的代码更加健壮和灵活。设计模式可以带来以下好处:提高代码的可读性和可维护性、提高软件的可复用性、提高开发效率、提高系统的灵活性和可扩展性。今天我们讲一下观......
  • 《精通Python设计模式》 PDF电子书 +源码
    第1章工厂模式第2章建造者模式第3章其他创建型模式第4章适配器模式第5章装饰器模式第6章桥接模式第7章外观模式第8章其他结构型模式第9章职责链模式第10章命令模式第11章观察者模式第12章状态模式第13章其他行为型模式第14......
  • 设计模式-门面模式
    门面模式(文章目录)1、什么是门面模式  门面模式为子系统提供一组统一的接口,定义一组高层接口让子系统更易用。注意这里针对的是接口。  这个定义很简洁,我再进一步解释一下。  假设有一个系统A,提供了a、b、c、d四个接口。系统B完成某个业务功能,需要调用A系统的......
  • 6. 前端设计模式之观察者模式
    使用观察者模式,我们可以将某些对象(观察者)订阅到另一个对象(可观察对象)。当一个事件发生时,可观察对象会通知它的所有观察者!这个模式出境的概率就比较高了,无论是在前端还是后端,都能见到它的身影,特别跟事件有关的场景。从定义看这个模式涉及到两种对象,一种可观察对象也就是观察的......
  • 设计模式-装饰器模式
    装饰器模式(文章目录)什么是装饰器模式  装饰器(Decorator)模式的定义:指在不改变现有对象结构的情况下,动态地给该对象增加一些职责(即增加其额外功能)的模式。为什么使用装饰器模式使用装饰者模式有如下好处:  1.避免了类爆炸问题,简化了设计  2.易于扩展,可以灵活组......
  • Android开发中常见的设计模式
    Android开发中常见的设计模式对于开发人员来说,设计模式有时候就是一道坎,但是设计模式又非常有用,过了这道坎,它可以让你水平提高一个档次。而在android开发中,必要的了解一些设计模式又是非常有必要的。对于想系统的学习设计模式的同学,这里推荐2本书。一本是HeadFirst系列的HeadH......