现在的位置: 首页 > 综合 > 正文

设计模式/工厂模式

2018年05月26日 ⁄ 综合 ⁄ 共 1991字 ⁄ 字号 评论关闭

1、Factory(工厂模式)

 

追MM少不了请吃饭了,麦当劳的鸡翅和肯德基的鸡翅都是MM爱吃的东西,虽然口味有所不同,但不管你带MM去麦当劳或肯德基,只管向服务员说“来四个鸡翅”就行了。麦当劳和肯德基就是生产鸡翅的Factory……

 

工厂模式:客户类和工厂类分开。

 

目的:

工厂模式就是专门负责将大量有共同接口的类实例化,而且不必事先知道每次是要实例化哪一个类的模式。它定义一个用于创建对象的接口,由子类决定实例化哪一个类。

优点:

        消费者任何时候需要某种产品,只需向工厂请求即可。

        消费者无须修改就可以接纳新产品。

缺点:

        是当产品修改时,工厂类也要做相应的修改。

例如:  

        如何创建及如何向客户端提供。   

 

工厂模式 {

        简单工厂模式 , 一个具体的工厂类来实现

        工厂方法模式 , 抽象工厂类中具体的产品类

        抽象工厂模式 , 抽象工厂类中的抽象产品类

}

一个简单工厂模式的例子

// 1. 具体的工厂类
public class mFactory {

	static String CAR = "Car";
	static String SWEET = "Sweet";
	
	public mProduct createProduct(String type){
		
		if(type.equals(CAR))
			return new mProduct_Car();
		else if(type.equals(SWEET))
			return new mProduct_Sweet();
		else return null;
	}
}
// 2. 产品接口 or 产品抽象类
public interface mProduct {
		public void getName();
}
// 3.具体的产品
public class mProduct_Car implements mProduct{

		public void getName(){
			System.out.println("mProduct_Car");
		}
}
public class mProduct_Sweet implements mProduct{

		public void getName(){
			System.out.println("mProduct_Sweet");
		}
}
// 4.测试类
public class Test {
	 public static void main(String[] args) {   
         mFactory creator = new mFactory();   
         creator.createProduct("Car").getName();   
         creator.createProduct("Sweet").getName();   
     }   
}

一个抽象工厂模式的例子

 1. 抽象工厂类
public abstract class mFactory {
	
	public abstract mProduct create_Car();
	public abstract mProduct create_Bus();
}
//2 .具体的工厂方法
public class mFactory_Car extends mFactory{

	@Override
	public Car create_Car() {
		// TODO Auto-generated method stub
		return new Car();
	}

	@Override
	public Bus create_Bus() {
		// TODO Auto-generated method stub
		return new Bus();
	}	
}
//3. 抽象产品类
public abstract class mProduct {
	
	public void getName(){};
}
//4. 具体产品类
public class Bus extends mProduct{

		public void getName(){
			System.out.println("Create Bus");
		}
		public void run(){
			System.out.println("Bus is Running!");
		}
}
public class Car extends mProduct{
	
	public void getName(){
		System.out.println("Create Car");
	}
	
	public void run(){
		System.out.println("Car is Running!");
	}
}
// 5.测试类
public class Test {

	 public static void main(String[] args) {   
			
			mFactory factory = new mFactory_Car();
			
			Bus bus = (Bus) factory.create_Bus();

			bus.getName();
			
			Car car = (Car) factory.create_Car();
			
			car.getName();
		}
}

其实这其实就是一种模式 , 只是细分了特殊情况 . 目的是 延迟实例化对象的操作,将产品类与工厂类分开

抱歉!评论已关闭.