首页 > 代码库 > Android 设计模式之创建型模式

Android 设计模式之创建型模式

工厂方法模式

定义:  定义一个用于创建对象的接口,让子类决定实例化哪一个类.  

         工厂方法是一个类的实例化延迟到其子类

/*************************面包师*****************************/
//面包师类  
public class BreadMaker{
    public void getBread(){}
}
//黑面包
public class BlackBread extends BreadMaker{
    @Override
    public void getBread(){
        System.out.println("烤出黑面包");
    }
}
//蜂蜜面包
public class HoneyBread extends BreadMaker{
    @Override
    public void getBread(){
        System.out.println("烤出蜂蜜面包");
    }
}
//白面包
public class WhiteBread extends BreadMaker{
    @Override
    public void getBread(){
        System.out.println("烤出白面包");
    }
}

/**********************工厂***********************************/
//工厂接口
interface IFactory {
    public BreadMaker createBread();
}

//黑面包工厂
public class BlackBreadFactory implements IFactory{

    @Override
    public BreadMaker createBread() {
        // TODO Auto-generated method stub
        return new BlackBread();
    }
}
//蜂蜜面包工厂
public class HoneyBreadFactory implements IFactory{
    
    @Override
    public BreadMaker createBread() {
        // TODO Auto-generated method stub
        return new HoneyBread();
    }
}
//白面包工厂
public class WhiteBreadFactory implements IFactory{
    
    @Override
    public BreadMaker createBread() {
        // TODO Auto-generated method stub
        return new WhiteBread();
    }
}

/*************************** 客户端实现*******************************/
public static void main(String[] args){
    
    //面包工厂
    IFactory breadFactory; 
    //面包师
    BreadMaker breadMaker;
    
    //顾客要黑面包
    breadFactory = new BlackBreadFactory();//实例化黑面包工厂
    breadMaker = breadFactory.BlackBread();//实例化黑面包师
    breadMaker.getBread();//制作黑面包
    
    //顾客要蜂蜜面包
    breadFactory = new HoneyBreadFactory();//实例化蜂蜜面包工厂
    breadMaker = breadFactory.HoneyBread();//实例化蜂蜜面包师
    breadMaker.getBread();//制作蜂蜜面包
    
    //顾客要白面包
    breadFactory = new WhiteBreadFactory();//实例化白面包工厂
    breadMaker = breadFactory.WhiteBread();//实例化白面包师
    breadMaker.getBread();//制作白面包
    
}

使用范围: 1.一个类不知道它所创建的对象的类时.  2. 一个类希望由它的子类来指定它所创建的对象时.  3. 类将创建对象的职责委托给多个子类中的某一个.

如果产品种类比较少可以运用其他更简单的方法,比如一种叫简单工厂模式的,如果产品种类比较丰富可以选择工厂方法模式

抽象工厂模式

定义: 提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类.

代码示例:  如果还想要销售披萨饼,  而且面包师也会做披萨的话,在上面的工厂接口中添加 制作披萨的接口方法

PizzaMaker createPizza();  //在IFactory接口中添加   PizzaMaker 是披萨师类, 类似面包师类

使用范围: 1. 一个系列要独立于它的产品的创建,组合和表示时.

                  2. 一个系统要由多个产品系列的一个来配置时

                  3. 当要提供一个产品类库,而只要显示它们的接口而不是实现时

                  4. 要强调一系列相关的产品对象的设计以便进行联合使用时

缺点: 如果产品需求改变,可能会需要在声明过产品类的地方进行大量的修改.  可以通过反射+抽象工厂模式结合





Android 设计模式之创建型模式