2:工厂设计模式(Factory)

对于接口而言,必须有子类,并且子类可以通过对象的向上转型来获取接口的实例化对象;

但是在进行对象实例化的过程中也可能存在有设计问题。

1:问题的产生

interface IFood {	// 定义一个食物标准
	public void eat() ; // 吃
}
class Bread implements IFood { // 定义一种食物
	public void eat() {
		System.out.println("吃面包。") ;
	}
}
public class JavaDemo {
	public static void main(String args[]) {
		IFood food = new Bread() ;
		food.eat() ;// 吃面包
	}
} 
//在本程序之中根据接口进行子类的定义,并且利用对象的向上转型进行接口对象实例化处理

程序的结构如下:

在这里插入图片描述

客户端需要明确知道具体的哪一个子类,如果现在面包吃腻,需要牛奶了,那么客户端需要做出修改。(就是new后边的类改变了)

interface IFood {	// 定义一个食物标准
	public void eat() ; // 吃
}
class Bread implements IFood { // 定义一种食物
	public void eat() {
		System.out.println("吃面包。") ;
	}
}
class Milk implements IFood { // 定义一种食物
	public void eat() {
		System.out.println("喝牛奶。") ;
	}
}
public class Test {
	public static void main(String args[]) {
		IFood food = new Milk() ;
		food.eat() ;// 喝牛奶。
	}
} 

IFood food = new Milk() ;//需要不停修改类的名称
此时的程序就表示出现有耦合问题,由于“关键字new”。以JVM的设计为例,java实现可移植性的关键在于:JVM,而JVM的核心原理:利用一个虚拟机来进行Java程序,所有的程序并不与具体的操作系统有关,而由JVM来进行匹配,所以良好的设计应该避免耦合。

//利用工厂模式解决耦合问题;
interface IFood {	// 定义一个食物标准
	public void eat() ; // 吃
}
class Bread implements IFood { // 定义一种食物
	public void eat() {
		System.out.println("吃面包。") ;
	}
}
class Milk implements IFood { // 定义一种食物
	public void eat() {
		System.out.println("喝牛奶。") ;
	}
}
class Factory {
	public static IFood getInstance(String className) {
		if ("bread".equals(className)) {
			return new Bread() ;
		} else if ("milk".equals(className)) {
			return new Milk() ;
		} else {
			return null ;
		}
	}
}
public class JavaDemo {
	public static void main(String args[]) {
		IFood food = Factory.getInstance(args[0]) ;
		food.eat() ;// 吃面包
	}
} 

在上述程序中,客户端程序类与IFood接口的子类没有任何的关联,所有的关联都是通过Factory类完成的。
在这里插入图片描述

总结:如果日后进行子类扩充的时候只需要修改Factory程序类即可实现。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值