简单工厂模式+工厂方法模式+抽象工厂模式
简单工厂模式
示例代码如下:
public interface Fruit {
void description();
}
public class Apple implements Fruit {
@Override
public void description() {
System.out.println("This is an apple");
}
}
public class Banana implements Fruit {
@Override
public void description() {
System.out.println("This is a banana");
}
}
public class FruitFactory {
public static Fruit getFruitInstance(String name){
switch(name){
case "apple":
return new Apple();
case "banana":
return new Banana();
default:
return null;
}
}
}
public class Test {
public static void main(String[] args) {
Fruit fruit=FruitFactory.getFruitInstance("apple");
fruit.description();
fruit=FruitFactory.getFruitInstance("banana");
fruit.description();
}
}
public class Orange implements Fruit {
@Override
public void description() {
System.out.println("This is an orange");
}
}
public class FruitFactory {
public static Fruit getFruitInstance(String name){
switch(name){
case "apple":
return new Apple();
case "banana":
return new Banana();
case "orange":
return new Orange();
default:
return null;
}
}
}
工厂方法模式
public interface Fruit {
void description();
}
public class Apple implements Fruit {
@Override
public void description() {
System.out.println("This is an apple");
}
}
public class Banana implements Fruit {
@Override
public void description() {
System.out.println("This is a banana");
}
}
public interface FruitFactory {
Fruit createFruit();
}
public class AppleFactory implements FruitFactory {
@Override
public Fruit createFruit() {
return new Apple();
}
}
public class BananaFactory implements FruitFactory {
@Override
public Fruit createFruit() {
return new Banana();
}
}
public class Test {
public static void main(String[] args) {
FruitFactory fruitFactory=new AppleFactory();
Fruit fruit=fruitFactory.createFruit();
fruit.description();
fruitFactory=new BananaFactory();
fruit=fruitFactory.createFruit();
fruit.description();
}
}
public class Orange implements Fruit {
@Override
public void description() {
System.out.println("This is an orange");
}
}
public class OrangeFactory implements FruitFactory {
@Override
public Fruit createFruit() {
return new Orange();
}
}
抽象工厂模式
public interface Fruit {
void description();
}
public class Apple implements Fruit {
@Override
public void description() {
System.out.println("This is an apple");
}
}
public class Banana implements Fruit {
@Override
public void description() {
System.out.println("This is a banana");
}
}
public class ImportedApple implements Fruit {
@Override
public void description() {
System.out.println("This is a imported apple");
}
}
public class ImportedBanana implements Fruit {
@Override
public void description() {
System.out.println("This is a imported banana");
}
}
public interface FruitFactory {
Fruit createApple();
Fruit CreateBanana();
}
public class ChinaFactory implements FruitFactory {
@Override
public Fruit createApple() {
return new Apple();
}
@Override
public Fruit CreateBanana() {
return new Banana();
}
}
public class ImportedFactory implements FruitFactory {
@Override
public Fruit createApple() {
return new ImportedApple();
}
@Override
public Fruit CreateBanana() {
return new ImportedBanana();
}
}
public class Test {
public static void main(String[] args) {
FruitFactory fruitFactory=new ChinaFactory();
Fruit fruit=fruitFactory.createApple();
fruit.description();
fruitFactory=new ImportedFactory();
fruit=fruitFactory.createApple();
fruit.description();
}
}
测试代码:
这里我们除了国内厂商的水果外,新增了进口水果产品,进口水果也包含了苹果,香蕉等,其组成了进口产品族,在工厂对象里,我们抽象出了一个工厂接口提供了苹果和香蕉的产品,国内厂商实现了抽象接口,提供了国产的苹果和香蕉产品,进口的厂商实现了抽象接口,提供了进口的苹果和香蕉产品,我们在使用的时候,如果去的是国内的厂商,那么得到的就是国内的水果产品,如果去的是国外的厂商,那么得到的就是进口的水果产品。