简单工厂模式
/*
* 这个是抽象的产品类,后续的所有的产品都必须实现这个抽象类
*/
public interface Shape {
public void draw(); //提供一个实现方法,作为画画的动作
}
/*
* 矩形的产品类,其中实现了Shape这个类
*/
public class Rectangle implements Shape {
/**
* 实现了Shape中的方法
*/
@Override
public void draw() {
System.out.println("我们画了一个矩形");
}
}
/*
* 圆形的产品类,实现了Shape这个类
*/
public class Circle implements Shape {
@Override
public void draw() {
System.out.println("我们画了一个圆");
}
}
/*
* 简单工厂的实例
* 其中提供一个getShape(String name) 可以根据提供的名字来返回一个对象,其实工厂生产的产品
*/
public class SimpleFactoryDemo {
public Shape getShape(String name) {
switch (name) {
case "矩形":
return new Rectangle(); // 返回矩形的对象
case "圆形":
return new Circle(); // 返回圆形对象
default:
System.out.println("我们不能创建一个额外的对象");
return null; // 没有指定对象就返回null
}
}
}
public class ClientMain {
public static void main(String[] args) {
String name = "圆形"; // 填入名字
SimpleFactoryDemo simpleFactoryDemo = new SimpleFactoryDemo(); // 创建简单工厂实例
Shape shape = simpleFactoryDemo.getShape(name); // 根据名字获取对象
shape.draw(); // 调用方法
}
}
/*
* 抽象的工厂类
* 其中定义一个方法 getShape() 返回的是Shape类型的产品类
*/
public interface FactoryInterface {
public Shape getShape();
}
/*
* 生产圆形的产品类 其中实现了抽象的工厂类
*/
public class FactoryCircle implements FactoryInterface {
@Override
public Shape getShape() {
return new Circle();
}
}
/**
* 生产矩形的工厂类,其中实现了抽象工厂类
*/
public class FactoryRectangle implements FactoryInterface {
@Override
public Shape getShape() {
return new Rectangle();
}
}
public class ClientMain {
public static void main(String[] args) {
//使用多态创建工厂类
FactoryInterface factoryInterface=new FactoryCircle(); //创建圆形的工厂类
factoryInterface.getShape().draw(); //生成Circle对象并且调用方法
FactoryInterface factoryInterface2=new FactoryRectangle(); //创建矩形的工厂类
factoryInterface2.getShape().draw(); //生成Rectangle的对象并且调用方法
}
}
/*
* 薯条的接口,这也是一个抽象的产品类,其中可以有多个具体的产品类,比如麦当劳的薯条,肯德基的薯条
*/
public interface IChips {
public void eat();
}
/*
* 鸡翅的接口,这是一类产品的接口,在其中可以实现具体的产品类,比如麦当劳的麦乐鸡,肯德基的奥尔良烤翅
*/
public interface IChicken {
public void eat();
}
/*
* 抽象工厂类,用来生产鸡翅和薯条的工厂类,下面可以衍生出多个具体的工厂类来生产指定商家的鸡翅和薯条
*/
public interface IStore {
public IChicken createChicken(); // 生产鸡翅
public IChips createChips(); // 生产薯条
}
/*
* 肯德基的奥尔良烤翅类,是IChicken的具体实现类,是一个具体的产品
*/
public class KfcChicken implements IChicken {
@Override
public void eat() {
System.out.println("你吃了肯德基的奥尔良烤翅......");
}
}
/**
* 麦当劳的薯条,是IChips具体实现类,也是一个具体的产品类
*/
public class McChips implements IChips {
@Override
public void eat() {
System.out.println("你吃了麦当劳的薯条......");
}
}
/*
* 麦当劳的鸡翅,这是IChicken的具体的实现产品类
*/
public class McChicken implements IChicken {
@Override
public void eat() {
System.out.println("你吃了的麦当劳的鸡翅......");
}
}
/**
* 肯德基的薯条,是IChips具体实现类,也是一个具体的产品类
*/
public class KfcChips implements IChips {
@Override
public void eat() {
System.out.println("你吃了肯德基的薯条......");
}
}
/*
* 肯德基的工厂,实现了抽象工厂,这个工厂可以生产肯德基的鸡翅和薯条
*/
public class KFCFactory implements IStore {
@Override
public IChicken createChicken() {
return new KfcChicken(); // 生产肯德基的鸡翅
}
@Override
public IChips createChips() {
return new KfcChips(); // 生产肯德基的薯条
}
}
/*
* 麦当劳的工厂,实现了抽象工厂,这个工厂可以生产麦当劳的鸡翅和薯条
*/
public class McFactory implements IStore {
@Override
public IChicken createChicken() {
return new McChicken(); // 生产麦当劳的鸡翅
}
@Override
public IChips createChips() {
return new McChips(); // 生产麦当劳的薯条
}
}
public class ClientMain {
public static void main(String[] args) {
IStore iStore1=new KFCFactory(); //创建肯德基的具体工厂类
iStore1.createChicken().eat(); //吃了肯德基的鸡翅
iStore1.createChips().eat(); //吃了肯德基的薯条
IStore iStore2=new McFactory(); //创建麦当劳的具体工厂类
iStore2.createChicken().eat(); //吃了麦当劳的鸡翅
iStore2.createChips().eat(); //吃了麦当劳的薯条
}
}