首页 > 编程语言 >JAVA设计模式-工厂模式

JAVA设计模式-工厂模式

时间:2022-09-18 11:46:40浏览次数:130  
标签:implements JAVA eat void public 工厂 设计模式 class

JAVA设计模式-工厂模式

简单工厂模式

介绍

简单工厂模式就是定义一个工厂类,工厂类提供获取实例的方法,方法会根据传入的参数不同来返回不同的实例。不同的实例基本都有共同的父类。对于下面的例子里面增加新的动物需要修改代码,否则无法扩展。

image-20220917131508935

image-20220917130638382

代码示例

/**
 * 接口定义
 */
interface Animal {
    void eat();
}
/**
 * 实现类
 */
class Dog implements Animal{
    public void eat() {

    }
}
/**
 * 实现类
 */
class Cat implements Animal{
    public void eat() {

    }
}
class AnimalFactory{
    public static Animal createAnimal(String type){
        if("Cat".equals(type)){
            return new Cat();
        } else if("Dog".equals(type)){
            return new Dog();
        }
        return null;
    }
}

工厂方法模式

介绍

工厂方法模式和简单工厂模式区别,简单工厂模式工厂类只有一个,工厂方法模式可能有一个或者多个,它们都是实现了相同接口的一组工厂类。

image-20220917131803336

image-20220917132050471

代码示例

/**
 * 接口定义
 */
interface Animal {
    void eat();
}
/**
 * 实现类
 */
class Dog implements Animal{
    public void eat() {

    }
}
/**
 * 实现类
 */
class Cat implements Animal{
    public void eat() {

    }
}
/**
 * 接口定义
 */
interface AnimalFactory {
    Animal createAnimal();
}
/**
 * 实现类
 */
class DogFactory implements AnimalFactory{
    public Animal createAnimal() {
        return new Dog();
    }
}
/**
 * 实现类
 */
class CatFactory implements AnimalFactory{
    public Animal createAnimal() {
        return new Cat();
    }
}

抽象工厂模式

介绍

抽象工厂模式可以理解成创建工厂的工厂,每一个生成的工厂又可以按照工厂模式创建对象。这里面其实有一个产品族的概念,产品族是不同的一组产品等级结构的一组产品。还有产品等级结构等概念,这里就不过多展开了。抽象工厂模式可以理解为解决两个维度组合产品的构造问题,取其中一个维度作为产品族,另一个维度作为产品族中的具体的多个产品。

image-20220917210824122

image-20220917210130567

代码示例
interface Dog {
    void eat();
}

class BlackDog implements Dog{
    public void eat() {

    }
}

class WhiteDog implements Dog{
    public void eat() {

    }
}

interface Cat {
    void eat();
}

class BlackCat implements Cat{
    public void eat() {

    }
}

class WhiteCat implements Cat{
    public void eat() {

    }
}

interface AnimalFactory {
    Dog createGog();
    Cat createCat();
}

class WhiteAnimalFactory implements AnimalFactory{
    public Dog createGog() {
        return new WhiteDog();
    }

    public Cat createCat() {
        return new WhiteCat();
    }
}

class BlackAnimalFactory implements AnimalFactory{
    public Dog createGog() {
        return new BlackDog();
    }

    public Cat createCat() {
        return new BlackCat();
    }
}

小结

工厂方法模式只有一个抽象产品类,可以有多个具体的产品类去实现,工厂类类似,只有一个抽象的工厂类,可以有多个具体的工厂类去实现,每一个具体的工厂类只能创建一个具体的产品类的实例。

抽象工厂模式有多个抽象的产品类,每个抽象的产品类可以有多个具体的产品类去实现,但是只有一个抽象的工厂类,这个工厂类可以有多个具体的工厂类去实现,每个具体的工厂类可以创建多个具体的产品类的实例。

关注微信公众号「平哥技术站」, 每日更新,在手机上阅读所有教程,随时随地都能学习。

原文链接:https://monkey.blog.xpyvip.top/archives/java-she-ji-mo-shi---gong-chang-mo-shi

标签:implements,JAVA,eat,void,public,工厂,设计模式,class
From: https://www.cnblogs.com/aibianchengya/p/16704516.html

相关文章

  • Java【Spring】——@Component系列注解
    最近学习到 @Component,以及系列注解: @Controller  @Service  @Repository,这些注解的作用时是实例化接口到Spring容器中。事实上, @Controller  @Service  ......
  • JAVA 用for/while循环打印1-100相加
    1.for循环:publicclasstest1{publicstaticvoidmain(String[]args){intsum=0;for(inti=1;i<=100;i++){sum+=i;}......
  • 配置绿色免安装版的C/C++、java、python环境,重装系统可以继续使用
    windows系统用一段时间就会变得臃肿,我平均每年都会重装一下系统,因此需要配置免安装的环境,重装系统可以继续使用。 1、C/C++环境安装配置主流都是用minGwin的gcc/g++,最......
  • java的数组基础练习题
    A建立一个50元素组成的数组把1-100的所有偶数放在数组里并显示。packagefuxi;publicclassw091604练习题数组{publicstaticvoidmain(String[]args){ //TO......
  • JAVA 遍历数组,找出数组中的最大值
    publicclasstest1{publicstaticvoidmain(String[]args){int[]arr={99,25,34,48,63,78,101,71,12};intmax=arr[0];for(inti=......
  • java static 静态
    static是java语言中的关键字,意思是“静态的”,它可以用来修饰变量、方法、代码块等,修饰的变量叫做静态变量,修饰的方法叫做静态方法,修饰的代码块叫做静态代码块。static的......
  • java中 static关键字
    在类中,使用static修饰符修饰的属性(成员变量)称为静态变量,也可以称为类变量,常量称为静态常量,方法称为静态方法或类方法,它们统称为静态成员,归整个类所有。静态成员不依赖于......
  • JAVA 方法(函数)的重载
    所谓方法重载,就是在同一个作用域内,方法名相同但参数个数或者参数类型不同的方法。publicclasstest1{publicstaticvoidmain(String[]args){//方法......
  • JAVA 调用方法(函数)实现打印矩形
    publicclasstest1{publicstaticvoidmain(String[]args){printRectangle(3,5);//调用printRectangle方法实现打印矩形printRectangle(2,4......
  • JAVA break和continue的区别和应用
    1.break语句:1)打印直角三角星型publicclasstest1{publicstaticvoidmain(String[]args){inti,j;for(i=1;i<=9;i++){//外层循环......