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(); } }
其实这其实就是一种模式 , 只是细分了特殊情况 . 目的是 延迟实例化对象的操作,将产品类与工厂类分开