设计模式之工厂模式(Java)

 工厂模式是Java中最常见的模式之一

简单工厂模式:一个抽象的接口,多个抽象接口的实现类,一个工厂类,用来实例化抽象的接口

 

//接口与产品实体类

//共同使用的接口
interface  phone{
	public void run();
	public void stop();
}

//具体实现类miphone
class miPhone implements phone{

	@Override
	public void run() { 
		System.out.println("miphone run!");
	}

	@Override
	public void stop() { 
		System.out.println("miphone stop!");
	}
	
}

//具体实现类iPhone 
class iPhone implements phone{

	@Override
	public void run() { 
		System.out.println("iPhone run!");
	}

	@Override
	public void stop() { 
		System.out.println("iPhone stop!");
	}
	
}


从上面的代码可以知道,有两种手机。

一个工厂具有多种手机制造的能力

//具体工厂类
class phoneFactory{
	public static phone getPhoneInstance(String phone) {
		if(phone.equals("iPhone")){
			return new iPhone();
		}else if(phone.equals("miPhone")) {
			return new miPhone();
		}else {
			System.out.println("本工厂不能生产该种手机!");
			return null;
		}
		
	}
}

测试:


public class factorydemo { 
	public static void main(String[] args) {
//		创建一个生产手机得工厂
		phoneFactory phonex = new phoneFactory();
//		与小米公司合作生产小米手机
		phone miPhonex = phoneFactory.getPhoneInstance("miPhone");
		miPhonex.run();
		miPhonex.stop();
//		与苹果公司合作生产苹果 手机
		phone iPhonex = phoneFactory.getPhoneInstance("iPhone");
		iPhonex.run();
		iPhonex.stop();
	}

}

结果:

设计模式之工厂模式(Java)_第1张图片

 

//工厂类
class phoneFactory{
	public static phone getMiPhone() {
		return new miPhone();
	}
	public static phone getIPhone() {
		return new iPhone();
	}
}
//实验类
public class factorydemo {
	public static void main(String[] args) {
		phone iPhonex = phoneFactory.getIPhone();
		iPhonex.run();
		iPhonex.stop();
		
		phone miphonex = phoneFactory.getMiPhone();
		miphonex.run();
		miphonex.stop();
	}
}

结果:

设计模式之工厂模式(Java)_第2张图片

工厂抽象化:

//抽象工厂类
 abstract class abstractFactory{
	public abstract iPhone createiPhone();
	public abstract miPhone createmiPhone();
}
//具体工厂类
 class phoneFactory extends abstractFactory{

	@Override
	public iPhone createiPhone() {
		return new iPhone();
	}

	@Override
	public miPhone createmiPhone() {
		return new miPhone();
	}
	
}


public class factorydemo {
	public static void main(String[] args) {
		
		phone iPhonex = new phoneFactory().createiPhone();
		iPhonex.run();
		iPhonex.stop();
		
		phone miphonex = new phoneFactory().createmiPhone();
		miphonex.run();
		miphonex.stop();
	}
}

使用工厂模式的优缺点

优点: 1、一个调用者想创建一个对象,只要知道其名称就可以了。 2、扩展性高,如果想增加一个产品,只要扩展一个工厂类就可以。 3、屏蔽产品的具体实现,调用者只关心产品的接口。

缺点:每次增加一个产品时,都需要增加一个具体类和对象实现工厂,使得系统中类的个数成倍增加,在一定程度上增加了系统的复杂度,同时也增加了系统具体类的依赖。 

注意事项:作为一种创建类模式,在任何需要生成复杂对象的地方,都可以使用工厂方法模式。有一点需要注意的地方就是复杂对象适合使用工厂模式,而简单对象,特别是只需要通过 new 就可以完成创建的对象,无需使用工厂模式。如果使用工厂模式,就需要引入一个工厂类,会增加系统的复杂度。

你可能感兴趣的:(Java,总结,java)