设计模式实践(二)工厂模式

强大的Spring框架中的IOC就是用到了这种模式。

1. 简单工厂设计模式

我们以衬衫为例,原来的模式是我自己做一件,现在是告诉工厂,你帮我生产一件。来实现一个最简单的简单工厂模式,首先由5个类构成(至少),分别是:接口类(用于定义某一类型的对象所具有的方法)、2个实现类(用于实现接口类,实现了多态的一种解释,即相同的方法,不同的结果)、工厂类(用于生成实现类的对象)、最后一个是测试类Main。

接口类:Shirt.java,这里提供了一种显示颜色的方法。

public interface Shirt {
	public void showColor();
}
实现类1:WhiteShirt.java

public class WhiteShirt implements Shirt{
	private String color = "white";
	@Override
	public void showColor() {
		System.out.print(color);
	}
}
实现类2:BlueShirt.java
public class BlueShirt implements Shirt{
	private String color = "blue";
	@Override
	public void showColor() {
		System.out.print(color);
	}
}
工厂类:ShirtFactory.java
public class ShirtFactory {	
	public Shirt getShirt() {
		//return new WhiteShirt();
		return new BlueShirt();
	}
}
测试类:Main.java
public class Main {
	public static void main(String[] args) {		
		ShirtFactory factory = new ShirtFactory();
		Shirt myshirt = factory.getShirt();
		myshirt.showColor();
	}
}

通过这种方式,将所有生成Shirt对象的逻辑集中在ShirtFactory中,所有的需要使用Shirt对象的程序与Shirt接口耦合,而不是以硬编码的实行耦合。这是一种面向接口编程的技术。这种方式提高了系统的可维护性和可扩展性。在上述的例子中,我们可以在工厂类中添加更多的产生不同实例类对象的方法。

2. 工厂方法

工厂方法指的是为每一种类型实现一个工厂类(这些工厂类也是实现了公共的工厂接口),而不是把所有类型的创建都放在一个工厂里面。同样是上面的例子,我们分别为Blue和White提供了工厂类,另外需要顶一个工厂接口。

工厂接口:ShirtFactoryMethod.java

public interface ShirtFactoryMethod {	
	Shirt getShirt();
}
两个工厂实现类:

BlueShirtFactory.java

public class BlueShirtFactory implements ShirtFactoryMethod{

	@Override
	public Shirt getShirt() {
		return new BlueShirt();
	}

}
WhiteSHirtFactory.java

public class WhiteSHirtFactory implements ShirtFactoryMethod{

	@Override
	public Shirt getShirt() {
		return new WhiteShirt();
	}

}
测试类:

public class Main {
	public static void main(String[] args) {		
		<strong>ShirtFactoryMethod factory = new WhiteSHirtFactory();</strong>
		Shirt myshirt = factory.getShirt();
		myshirt.showColor();
	}
}

3. 抽象工厂模式 

工厂方法虽然解决了在简单工厂方法中工厂类同进行逻辑判断创建对象的复杂方法,但是也造成了工厂类和代码的耦合。我们通过实现另外一个类来实现工厂对象的创建,从而解决了工厂对象和程序的硬编码问题。

工厂对象实现方法:

public class Main {
	public static void main(String[] args) {		
		<strong>ShirtFactoryMethod factory = AbstractShirtFactory.getShirtFactory("blue");</strong>
		Shirt myshirt = factory.getShirt();
		myshirt.showColor();
	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值