设计模式-Factory

定义

定义一个创建对象的接口,具体实例化成那个对象让子类自己去决定。

 

使用场景

使用场景非常广泛,可以说只要复杂的对象都可以使用。是不是感觉自己要爽一下。

 

角色包含

抽象工厂类:略掉的时候具体工厂类方法变为static,这是称为静态工厂模式。

具体工厂类:具体建造各式对象的执行类。

抽象产品类:产品类的抽象,子类体量较少且固定时可省略。

产品类:具体要生产的对象类

老规矩,来点代码看看。

假如我们想要开一家早餐店,做各式各样的早餐(偷懒了,只是为了方便)。我们现在暂时卖面条、煎饼。

抽象产品类

abstract class Food {
    abstract fun creatFood()
}

产品类

class Noodle : Food() {
    override fun creatFood() {
        Log.e("liulu","noodle")
    }
}

public class Pancake extends Food {
    @Override
    public void creatFood() {
        Log.e("liulu","pancake")
    }
}

抽象工厂类

abstract class Factory {
    abstract fun creatFood(): Food
}

工厂类

class NoodleFactory : Factory() {
    override fun creatFood(): Food {
        return Noodle()
    }

}
class PancakeFactory : Factory() {
    override fun creatFood(): Food {
        return Pancake()
    }

}

是不是感觉有点麻烦,是的,工厂类可以利用反射节省一步

 

// 抽象类
abstract class FactoryNew {
    abstract fun <T : Food> createFood(cla: Class<T>): T?
}


// 具体实现类
class FoodFactory : FactoryNew() {

    override fun <T : Food> createFood(cla: Class<T>): T? {
        try {
            return Class.forName(cla.name).newInstance() as T
        } catch (e: Exception) {
            return null
        }
    }
}

好了,大功告成,我们来验证下

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值