简单工厂模式又称为静态工厂模式主要用于类的创建(创建型模式都是)具体的工作方式我们可以通过类图来说明:
举个例子,假如我们买衣服,衣服的定义是布做的,人穿的(呵呵,有点废话),那么我们可以买外套 和裤子。具体的代码实现呢就可以这样来表示(便于观看,部分代码写成中文)
public class 买衣服 {
private 外套 买外套;
private 裤子 买裤子;
商家 衣服店 = new 商家();//调用简单工厂类
public void shopping(){
this.买外套 = 衣服店.卖外套();
this.买裤子 = 衣服店.卖裤子();
}
}
//实体类接口
interface 衣服{
public void 布做的();
public void 人穿的();
}
//实体类 外套
class 外套 implements 衣服{
public void 布做的() {
}
public void 人穿的() {
}
}
//实体类 裤子
class 裤子 implements 衣服{
public void 布做的() {
}
public void 人穿的() {
}
}
// 简单工厂类(相当于商家)
class 商家{
public 外套 卖外套(){
return new 外套();
}
public 裤子 卖裤子(){
return new 裤子();
}
}
由上可见我们在需要一个对象实体时,我们不用new一个出来而是通过调用简单工厂来为我们生成一个实例。简单工厂虽然实现类的创建,但在高内聚方面做得不好。同时只有一个工厂类对后期修改维护也是不利的。对此我们又提出了工厂方法模式。它是对简单工厂的进一步改进。同样看类图
通过与简单工厂对比我们可以发现,工厂方法给每个工厂新增一个接口。这就为新增新产品提供便利(开闭原则),同时与简单工厂不同的是工厂方法针对每一种产品提供一个工厂类。如果仍以上面买衣服为例子的话。用工厂模式则相当于在商家上一层新增一个总部,它规定了商家卖什么东西(也就是针对哪些产品提供工厂)。商家需要实现总部(工厂接口)接口。
抽象工厂模式
在学习抽象工厂具体实例之前,应该明白两个重要的概念:产品族和产品等级。
所谓产品族,是指位于不同产品等级结构中,功能相关联的产品组成的家族。比如AMD的主板、芯片组、CPU组成一个家族,Intel的主板、芯片组、CPU组成一个家族。而这两个家族都来自于三个产品等级:主板、芯片组、CPU。
而抽象工厂模式则针对产品族概念的。我们还是看类图:
通过类图我们可以看出抽象工厂的工作方式。通过工厂方法我们可以生产一个产品。而抽象工厂可以生产一个等级产品。他们是一种产品(都是主板)但属于不同族。
单例模式是一种比较重要的设计模式。他有懒汉,饿汉之分。内容较多,这里不详细解释了。具体了解,可以看上一篇博文中推荐个大家的博文。谢谢!!
小弟也是初学者,欢迎大家给出批评建议!!!!!!!!