簡單工廠模式+工廠方法模式+抽象工廠模式
簡單工廠模式
示例代碼如下:
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();
}
}
測試代碼:
這裏我們除了國內廠商的水果外,新增了進口水果產品,進口水果也包含了蘋果,香蕉等,其組成了進口產品族,在工廠對象裏,我們抽象出了一個工廠接口提供了蘋果和香蕉的產品,國內廠商實現了抽象接口,提供了國產的蘋果和香蕉產品,進口的廠商實現了抽象接口,提供了進口的蘋果和香蕉產品,我們在使用的時候,如果去的是國內的廠商,那麼得到的就是國內的水果產品,如果去的是國外的廠商,那麼得到的就是進口的水果產品。