设计模式之工厂模式

设计模式之工厂模式

  工厂模式专门负责将有大量的共同的接口的类实例化。工程模式可以决定哪一个类实例化,不必事先知道每次要实例化哪一个类。

  工厂模式有三种形态:
  1)简单工厂模式(Simple Factory):又称静态工厂方法模式
  2)工厂方法模式(Factory Method):又称为多形性工厂模式
  3)抽象工厂模式(Abstract Factory):又称为工具箱模式

  PS:简单工厂模式和工厂方法模式可以统称为普通工厂模式


 

例:养动物为例

public interface Animal {
    void sound();
}

public class Cat implements Animal{
    @Override
    public void sound() {
        System.out.println("喵喵。。。");
    }
}

public class Dog implements Animal {
    @Override
    public void sound() {
        System.out.println("旺旺。。。");
    }
}

 

简单工厂模式
public class SimpleAnimalFactory {
    public static Animal keep(String arg) {
        Animal animal = null;
        switch(arg) {
        case "cat":
            animal = new Cat();
            break;
        case "dog":
            animal = new Dog();
            break;
        }
        return animal;
    }
}
工厂方法模式
public interface AnimalFactory {
    Animal keep();
}

public class CatFactory implements AnimalFactory {
    @Override
    public Animal keep() {
        return new Cat();
    }
}

public class DogFactory implements AnimalFactory {
    @Override
    public Animal keep() {
        return new Dog();
    }
}

可以看出,每增加一种Animal就需要增加该类的工厂,当Animal种类越来越多时就会造成工厂泛滥。

 

除了养小动物我们有时还会养一些花

public interface Flower {
    void color();
}

public class Rose implements Flower {
    @Override
    public void color() {
        System.out.println("红玫瑰");
    }
}

public class Lily implements Flower {
    @Override
    public void color() {
        System.out.println("白百合");
    }
}

 

抽象工厂
public abstract class AbstractFactory {
    abstract Animal keep();
    abstract Flower grow();
}

public class DefaultFactory extends AbstractFactory {
    @Override
    Animal keep() {
        return new Dog();
    }

    @Override
    Flower grow() {
        return new Rose();
    }
}

 

测试

public class Test {
    public static void main(String[] args) {
        Animal a1 = SimpleAnimalFactory.keep("dog");
        a1.sound();
        
        AnimalFactory af = new CatFactory();
        Animal a2 = af.keep();
        a2.sound();
        
        AbstractFactory factory = new DefaultFactory();
        Animal animal = factory.keep();
        animal.sound();
        Flower flower = factory.grow();
        flower.color();
    }
}

转载于:https://www.cnblogs.com/wangj1130/p/4842875.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值