设计模式–工厂方法
工厂方法模式由抽象工厂、具体工厂、抽象产品、具体产品4个要素组成。
-抽象工厂:提供创建产品的具体接口。
-具体工厂:主要实现抽象工厂中的接口,完成具体产品的创建
-抽象产品:定义了产品的规范,描述了产品的主要特性和功能
-具体产品:实现了抽象产品中的接口,由具体工厂来创建,与具体工厂一一对应
- 抽象工厂
/**
* @Author lyq
* @Descripition 抽象工厂,生产接口
*/
public interface AbstractFactoryMethod {
//产品1
Product01 newProduct01();
//产品2
Product02 newProduct02();
}
- 具体工厂
-createFactory01工厂中的newProduct01产品、newProduct02产品属于一个产品等级,它们都是麻辣酱;
-createFactory02工厂中的newProduct01产品、newProduct02产品属于一个产品等级,它们都是豆腐乳;
-createFactory01工厂中的生产的newProduct01产品和createFactory02工厂中的生产的newProduct01产品等属于一个产品族,它们都是干妈品牌
-createFactory01工厂中的生产的newProduct02产品和createFactory02工厂中的生产的newProduct02产品等属于一个产品族,它们都是企鹅品牌
/**
* @Author lyq
* @Descripition 具体工厂,实现抽象工厂中的方法,完成具体产品的创建,属于同一个品牌
*/
public class createFactory01 implements AbstractFactoryMethod{
/*************************************麻辣酱工厂******************************************/
/**
* 创建第一款产品
* @return
*/
public Product01 newProduct01() {
System.out.println("创建干妈品牌产品:原味麻辣酱!");
return new CreateProduct11();
}
/**
* 创建第二款产品
* @return
*/
@Override
public Product02 newProduct02() {
System.out.println("创建企鹅品牌产品:原味麻辣酱!");
return new CreateProduct21();
}
}
/**
* @Author lyq
* @Descripition 具体工厂,实现抽象工厂中的方法,完成具体产品的创建
*/
public class createFactory02 implements AbstractFactoryMethod{
/*************************************豆腐乳工厂******************************************/
/**
* 创建第一款产品
* @return
*/
public Product01 newProduct01() {
System.out.println("创建干妈品牌产品:原味豆腐乳!");
return new CreateProduct12();
}
/**
* 创建第二款产品
* @return
*/
@Override
public Product02 newProduct02() {
System.out.println("创建企鹅品牌产品:原味豆腐乳!");
return new CreateProduct22();
}
}
- 抽象产品
/**
* @Author lyq
* @Descripition 抽象产品,定义了规范,描述了产品的特性和功能
*/
public interface Product01 {
void show();
}
/**
* @Author lyq
* @Descripition 抽象产品,定义了规范,描述了产品的特性和功能
*/
public interface Product02 {
void show();
}
- 具体产品
/**
* @Author lyq
* @Description 具体产品,实现了抽象产品所定义的接口
*/
public class CreateProduct11 implements Product01 {
public void show() {
System.out.println("品牌1:具体产品1展示.........");
}
}
/**
* @Author lyq
* @Description 具体产品,实现了抽象产品所定义的接口
*/
public class CreateProduct12 implements Product01 {
public void show() {
System.out.println("品牌1:具体产品2展示.........");
}
}
/**
* @Author lyq
* @Description 具体产品,实现了抽象产品所定义的接口
*/
public class CreateProduct21 implements Product02 {
public void show() {
System.out.println("品牌2:具体产品1展示.........");
}
}
/**
* @Author lyq
* @Description 具体产品,实现了抽象产品所定义的接口
*/
public class CreateProduct22 implements Product02 {
public void show() {
System.out.println("品牌2:具体产品2展示.........");
}
}
- 测试
/**
* @Author lyq
* @Descripition 测试类
*/
public class Test {
public static void main(String[] args) {
createFactory01 c1 = new createFactory01();
Product01 p11 = c1.newProduct01();
Product02 p21 = c1.newProduct02();
p11.show();
p21.show();
createFactory02 c2 = new createFactory02();
Product01 p12 = c2.newProduct01();
Product02 p22 = c2.newProduct02();
p12.show();
p22.show();
}
}
- 结果
创建干妈品牌产品:原味麻辣酱!
创建企鹅品牌产品:原味麻辣酱!
品牌1:具体产品1展示.........
品牌2:具体产品1展示.........
创建干妈品牌产品:原味豆腐乳!
创建企鹅品牌产品:原味豆腐乳!
品牌1:具体产品2展示.........
品牌2:具体产品2展示.........
-
类图
注意:+、-、#、~,分别表示公有(Public)、私有(Private)、受保护(Protected)和朋友(Friendly)4 种