简单工厂模式小结

简单工厂模式预备知识
1.OO原则:
OCP原则(Open-Close-Principle开闭原则):一个软件的实体应当对扩展开放,对修改关闭。(对于一个已有的软件,如果需要扩展,应当在不需修改已有代码的基础上进行。)


2.简单工厂模式:
(1)专门定义一个类来创建其他类的实例,被创建的实例通常都有公共的父类。
(2)简单工厂模式又称为静态工厂方法,属于类的创建型模式,通常他根据自变量的不同返回不同类的实例。
(3)实质:由一个工厂类根据传入的变量,动态的决定创建出哪一个产品类的实例。

工厂角色:它负责实现所有实例内部逻辑,工厂类可以被外界直接调用,创建所需产品对象


抽象产品角色:是简单工厂所创建的所有对象的父类,描述所有实例的共有的特性

具体产品角色:简单工厂的创建目标,所有创建的对象都是这个角色的所有具体类的实例。


下面是一个简单的例子:

package factory;
public interface IFruit 
{
	void plant();
	void grow();
	void harvest();
}

定义水果接口,抽象出水果的共有方法(抽象产品角色)


package factory;

public class Apple implements IFruit
{
	private int appleAge;
	public void plant()
	{
		System.out.println("apple has been planted");
	}

	public void grow() 
	{
		System.out.println("apple is growing");
	}
	
	public void harvest() 
	{
		System.out.println("apple has been harvesed");	
	}
	
	public void setTreeAge(int age)
	{
		this.appleAge = age;
	}
	
	public int getTreeAge()
	{
		return this.appleAge;
	}
}

定义苹果类,继承水果接口,并全部实现水果内部的方法(具体产品角色)


package factory;

public class Grape implements IFruit
{
	boolean seedless = false;
	public void plant() 
	{
		System.out.println("Grape has been planted");
	}

	public void grow() 
	{
		System.out.println("Grape is growing");		
	}
	public void harvest() 
	{
		System.out.println("Grape has been harvested");
	}
	
	public void setSeedless(boolean bb)
	{
		this.seedless = bb;
	}
	
	public boolean getSeedless()
	{
		return this.seedless;
	}
}

葡萄类,同苹果。

package factory;
/**
 * 
 * @author ustcqi
 *由一个工厂类根据传入的参数,动态的决定创建哪一个产品类的实例
 *工厂类是整个模式的关键,包含了必要的逻辑判断,根据外界给定的信息,
 *决定究竟创建哪个具体类的对象。
 *通过使用工厂类,外界可以从直接创建具体产品对象的局面摆脱出来
 *仅仅负责消费对象就可以了,而不必关心这些对象是如何创建和如何组织的。
 *有利于软件体系结构的优化
 */
public class Factory 
{
	public IFruit factory(String s)
	{
		if(s.equals("Apple"))
			return new Apple();
		else if(s.equals("Grape"))
			return new Grape();
		else
			System.out.println("Don't exist this fruit");
		return null;
	}
}

定义工厂类,用于生产水果。

import java.util.*;
import java.io.*;

import factory.Factory;
import factory.IFruit;

public class FactoryPattern 
{
	public static void main(String []args)
	{
		Factory ft = new Factory();
		IFruit apple = ft.factory("Apple");
		apple.grow();
		IFruit grape = ft.factory("Grape");
		grape.plant();
		IFruit ff = ft.factory("dfdf");
	}
}

最后的MAIN执行类


下面是计算器的简单工厂实现

抽象角色产品(操作类)

package pactory;

public class Operation 
{
	private double firNum;
	private double secNum;
	
	public void setFirNum(double a)
	{
		firNum = a;
	}
	
	public double getFirNum()
	{
		return this.firNum;
	}
	
	public void setSecNum(double b)
	{
		secNum = b;
	}
	
	public double getSecNum()
	{
		return secNum;
	}
	
	public double getResult()
	{
		return 0.0;
	}
}

具体产品角色(具体操作)

package pactory;

public class Addition extends Operation
{
	public double getResult()
	{
		return this.getFirNum() + this.getSecNum();
	}
}

减法操作:

package pactory;

public class Subtractor extends Operation
{
	public double getResult()
	{
		return this.getFirNum() - this.getSecNum();
	}
}

简单工厂类(生产产品角色类)

package pactory;

public class SimpleFactory 
{
	private Operation opr ;
	public Operation factoryOperate(String s)
	{
		if(s.equalsIgnoreCase("addition"))
			return new Addition();
		else if(s.equalsIgnoreCase("subtractor"))
			return new Subtractor();
		else
			return null;
	}
}

MAIN执行类

package pactory;

public class Main {
	public static void main(String[] args) 
	{
		SimpleFactory factory = new SimpleFactory();
		Operation opr = factory.factoryOperate("addition");
		opr.setFirNum(12.0);
		opr.setSecNum(23.9);
		double ret = opr.getResult();
		System.out.println(ret);
	}
}


最后一句话总结:简单工厂模式的实质:由一个工厂类根据传入的变量,动态的决定创建出哪一个产品类的实例。



抽象工厂模式: 抽象工厂模式是一种创建型设计模式,它提供了一种封装一组相关或相互依赖对象的方式,而不需要指定它们具体的类。通过使用抽象工厂模式,可以将客户端代码与具体类的实现解耦,从而使得客户端代码可以与多个具体类的实现进行交互。 建造者模式: 建造者模式是一种创建型设计模式,它允许你创建复杂对象的过程与其表示分离,以便同样的构建过程可以创建不同的表示。通过使用建造者模式,可以将一个复杂对象的构建过程拆分成多个简单的步骤,并且可以按照不同的顺序进行组合,从而灵活地构建出不同的对象。 工厂方法模式: 工厂方法模式是一种创建型设计模式,它定义了一个用于创建对象的接口,但是由子类决定要实例化的类是哪一个。通过使用工厂方法模式,可以将对象的实例化延迟到子类中进行,从而使得客户端代码与具体类的实现解耦。 迭代器模式: 迭代器模式是一种行为型设计模式,它提供了一种顺序访问聚合对象中各个元素的方法,而又不需要暴露该对象的内部表示。通过使用迭代器模式,可以在不暴露聚合对象的内部结构的情况下,让客户端代码能够按照顺序遍历聚合对象中的元素。 命令模式: 命令模式是一种行为型设计模式,它将请求封装成一个对象,从而使得可以用不同的请求对客户端进行参数化。通过使用命令模式,可以将请求发送者和请求接收者解耦,使得发送者不需要知道请求的具体执行细节。 观察者模式: 观察者模式是一种行为型设计模式,它定义了一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。通过使用观察者模式,可以实现对象之间的松耦合,使得对象之间的关系更加灵活。 状态模式: 状态模式是一种行为型设计模式,它允许对象在内部状态发生改变时改变其行为。通过使用状态模式,可以将对象的行为与其内部状态分离开来,并且可以动态地改变对象的行为。 适配器模式: 适配器模式是一种结构型设计模式,它允许将一个类的接口转换成客户端所期望的另一个接口。通过使用适配器模式,可以让原本不兼容的类能够合作,从而使得客户端代码能够与不同的类进行交互。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值