1、Factory(工厂模式)
追MM少不了请吃饭了,麦当劳的鸡翅和肯德基的鸡翅都是MM爱吃的东西,虽然口味有所不同,但不管你带MM去麦当劳或肯德基,只管向服务员说“来四个鸡翅”就行了。麦当劳和肯德基就是生产鸡翅的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();
}
}
其实这其实就是一种模式 , 只是细分了特殊情况 . 目的是 延迟实例化对象的操作,将产品类与工厂类分开