栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

工厂各种模式

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

工厂各种模式

前言

工厂模式各种模式

简单工厂模式

简单工厂模式是由一个工厂对象决定创建出哪一种(某个接口的多种具体实现)的实例。客户端只需要传入工厂类建造方法的参数(class对象),对于如何创建对象的逻辑不需要关心。

提供一个 IPeople 接口,有一个 eat 的方法。

public interface IPeople {
    public void eat();
}

这个接口可以有很多实现类,如:

public class JavaPeople implements IPeople {
    @Override
    public void eat() {
        System.out.println("Java人正在吃饭");
    }
}

接下来是工厂类:

public class PeopleFactory {

    public static IPeople create(Class clazz) {
        try {
            if (null != clazz) {
                return clazz.newInstance();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
}

此时,客户端只需传入要具体实例化对象的class对象,即可创建对象。

public static void main(String[] args) {
    IPeople iPeople = PeopleFactory.create(JavaPeople.class);
    iPeople.eat();
}

这样,如果以后有源源不断的 IPeople 接口的不同的实现类,也可以通过此工厂的方法完成创建。代码实现了解耦。

工厂方法模式

工厂方法模式是对工厂本身也做了一个抽象。由专门的工厂创建专门的对象。主要解决的是扩展问题,如果每个实例的创建逻辑有区别,那么就需要修改简单工厂的方法,不便于维护。如下面的例子,PythonPeople 在创建的时候需要指定 eat 的食物为蛋炒饭:

// 对工厂本身也做一个抽象
public interface IPeopleFactory {
    IPeople create();
}
public class PythonPeople implements IPeople {
    public void setFood(String food) {
        this.food = food;
    }
    private String food;
    @Override
    public void eat() {
        System.out.println("Python人正在吃:" + food);
    }
}
public class PythonPeopleFactory implements IPeopleFactory{
    @Override
    public IPeople create() {
        PythonPeople pythonPeople = new PythonPeople();
        pythonPeople.setFood("蛋炒饭");
        return pythonPeople;
    }
}
public class JavaPeopleFactory implements IPeopleFactory {
    @Override
    public IPeople create() {
        return new JavaPeople();
    }
}

客户端:

public static void main(String[] args) {
    JavaPeopleFactory javaCourseFactory = new JavaPeopleFactory();
    IPeople iPeople = javaCourseFactory.create();
    iPeople.eat();

    PythonPeopleFactory pythonPeopleFactory = new PythonPeopleFactory();
    IPeople iPeople1 = pythonPeopleFactory.create();
    iPeople1.eat();

}
抽象工厂模式

抽象工厂模式是指创提供一个创建一系列相关或相互依赖对象的接口。
比如说 JavaPeople 和 JavaBook 都 属于 Java 这一系列。举个好理解的例子:大米公司 有 :大米手机、大米电脑、大米平板,它们是不同的东西但是都属于大米这一个品牌。

public interface IBook {
    void read();
}
public interface IPeople {
    void eat();
}
public class JavaBook implements IBook {
    @Override
    public void read() {
        System.out.println("看Java书");
    }
}
public class JavaPeople implements IPeople {
    @Override
    public void eat() {
        System.out.println("Java人吃饭");
    }
}

抽象工厂,具体可以有很多实现,比如:JavaLanguageFactory,PythonLanguageFactory等等

public abstract class LanguageFactory {
    public void init() {
        System.out.println("初始化");
    }

    protected abstract IPeople createPeople();

    protected abstract IBook createBook();

}
public class JavaLanguageFactory extends LanguageFactory {
    @Override
    protected IPeople createPeople() {
        super.init();
        return new JavaPeople();
    }

    @Override
    protected IBook createBook() {
        super.init();
        return new JavaBook();
    }
}
public static void main(String[] args) {
    JavaLanguageFactory javaLanguageFactory = new JavaLanguageFactory();
    javaLanguageFactory.createBook().read();
    javaLanguageFactory.createPeople().eat();
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/732182.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号