Design Pattern
Factory Pattern
设计模式 工厂模式
工厂模式主要用于控制类生产的过程,避免客户类直接去使用具体类通过中间件工厂来降低耦合性。
简单工厂模式(Simple Factory Pattern)
UML图解(类图与时序图)
类图
时序图
java实现代码(经典)
/**
* @author Satsuki
* @time 2019/6/9 18:02
* @description:抽象产品类
*/
public abstract class Product {
//所有产品类的公共业务方法
public void methodSame(){
//公共方法的实现
}
//声明抽象业务方法
public abstract void methodDiff();
}
/**
* @author Satsuki
* @time 2019/6/9 18:05
* @description:
*/
public class ConcreteProduct extends Product {
//实现业务方法
@Override
public void methodDiff() {
//业务方法的实现
}
}
/**
* @author Satsuki
* @time 2019/6/9 18:08
* @description:
*/
public class Factory {
//静态工厂方法
public static Product getProduct(String arg){
Product product = null;
if(arg.equalsIgnoreCase("A")){
product = new ConcreteProduct();
//初始化设值product
}
else if (arg.equalsIgnoreCase("B")) {
// product = new ConcreteProductB();
//初始化设置product
}
return product;
}
}
/**
* @author Satsuki
* @time 2019/6/9 18:10
* @description:
*/
public class Client {
public static void main(String[] args) {
Product product;
product = Factory.getProduct("A");//通过工厂类创建产品对象
product.methodSame();
product.methodDiff();
}
}
java实现代码(实例)
/**
* @author Satsuki
* @time 2019/6/9 18:15
* @description:抽象产品类
*/
public interface Chart {
public void display();
}
/**
* @author Satsuki
* @time 2019/6/9 18:17
* @description:饼图:具体产品类
*/
public class PieChart implements Chart{
public PieChart() {
System.out.println("创建饼图");
}
@Override
public void display() {
System.out.println("显示饼图");
}
}
/**
* @author Satsuki
* @time 2019/6/9 18:19
* @description:
*/
public class LineChart implements Chart {
public LineChart() {
System.out.println("创建折线图");
}
@Override
public void display() {
System.out.println("显示折线图");
}
}
public class HistogramChart implements Chart {
public HistogramChart() {
System.out.println("创建柱状图");
}
@Override
public void display() {
System.out.println("显示柱状图");
}
}
**
* @author Satsuki
* @time 2019/6/9 18:20
* @description:图表工厂类:工厂类
*/
public class ChartFactory {
//静态工厂方法
public static Chart getChart(String type){
Chart chart = null;
if(type.equalsIgnoreCase("histogram")){
chart = new HistogramChart();
System.out.println("初始化设值柱状图");
}
else if (type.equalsIgnoreCase("pie")) {
chart = new PieChart();
System.out.println("初始化设置饼状图!");
}
else if (type.equalsIgnoreCase("line")) {
chart = new LineChart();
System.out.println("初始化设置折线图!");
}
return chart;
}
}
public class Client {
public static void main(String[] args) {
Chart chart;
chart = ChartFactory.getChart("histogram");//通过静态工厂方法创建产品
chart.display();
}
}
工厂方法模式(Factory Method Pattern)
UML图解(类图与时序图)
类图
时序图
java实现代码(经典)
/**
* @author Satsuki
* @time 2019/6/9 18:02
* @description:抽象产品类
*/
public abstract class Product {
//所有产品类的公共业务方法
public void methodSame(){
//公共方法的实现
}
//声明抽象业务方法
public abstract void methodDiff();
}
public class ConcreteProduct extends Product {
//实现业务方法
@Override
public void methodDiff() {
//业务方法的实现
}
}
public interface Factory {
public Product factoryMethod();
}
public class ConcreteFactory implements Factory {
@Override
public Product factoryMethod() {
// return new ConcreteProduct();
return new Product() {
@Override
public void methodDiff() {
}
};
}
}
java实现代码(实例)
/**
* @author Satsuki
* @time 2019/6/9 18:42
* @description:日志记录其接口:抽象产品
*/
public interface Logger {
public void writeLog();
}
/**
* @author Satsuki
* @time 2019/6/9 18:42
* @description:数据库日志记录器:具体产品
*/
public class DatabaseLogger implements Logger{
@Override
public void writeLog() {
System.out.println("数据库日志记录");
}
}
/**
* @author Satsuki
* @time 2019/6/9 18:43
* @description:文件日志记录器:具体产品
*/
public class FileLogger implements Logger {
@Override
public void writeLog() {
System.out.println("文件日志记录");
}
}
/**
* @author Satsuki
* @time 2019/6/9 18:43
* @description:日志记录器工厂接口:抽象工厂
*/
public interface LoggerFactory {
public Logger createLogger();
}
/**
* @author Satsuki
* @time 2019/6/9 18:44
* @description:数据库日志记录器工厂类:具体工厂
*/
public class DatabaseLoggerFactory implements LoggerFactory {
@Override
public Logger createLogger() {
//连接数据库,代码省略
//创建数据库日志记录器对象
Logger logger = new DatabaseLogger();
return logger;
}
}
public class Client {
public static void main(String[] args) {
LoggerFactory factory;
Logger logger;
factory = new FileLoggerFactory();
logger = factory.createLogger();
logger.writeLog();
}
}
抽象工厂模式(Abstract Factory Pattern)
UML图解(类图与时序图)
时序图
java实现代码(经典)
/**
* @author Satsuki
* @time 2019/6/9 18:58
* @description:
*/
public class AbstractFactory {
// public abstract AbstractProductA createProductA();//工厂方法1
// public abstract AbstractProductA createProductA();//工厂方法2
}
public class ConcreateFactory1 {
// //工厂方法一
// public AbstractProductA createProductA() {
// return new ConcreteProductA1();
// }
//
// //工厂方法二
// public AbstractProductB createProductB() {
// return new ConcreteProductB1();
// }
}
java实现代码(实例)
/**
* @author Satsuki
* @time 2019/6/9 19:04
* @description:文本框接口:抽象产品
*/
public interface TextField {
public void display();
}
/**
* @author Satsuki
* @time 2019/6/9 19:06
* @description:组合框接口:抽象产品
*/
public interface ComboBox {
public void display();
}
/**
* @author Satsuki
* @time 2019/6/9 19:02
* @description:按钮接口:抽象产品
*/
public interface Button {
public void display();
}
/**
* @author Satsuki
* @time 2019/6/9 19:07
* @description:界面皮肤工厂接口:抽象工厂
*/
public interface SkinFactory {
public Button createButton();
public TextField createTextField();
public ComboBox createComboBox();
}
/**
* @author Satsuki
* @time 2019/6/9 19:04
* @description:Spring文本框类:具体产品
*/
public class SpringTextField implements TextField {
@Override
public void display() {
System.out.println("显示绿色边框文本框。");
}
}
/**
* @author Satsuki
* @time 2019/6/9 19:06
* @description:Spring组合框类:具体产品
*/
public class SpringComboBox implements ComboBox {
@Override
public void display() {
System.out.println("显示绿色边框组合框。");
}
}
/**
* @author Satsuki
* @time 2019/6/9 19:03
* @description:Spring按钮类:具体产品
*/
public class SpringButton implements Button {
@Override
public void display() {
System.out.println("显示浅绿色按钮");
}
}
/**
* @author Satsuki
* @time 2019/6/9 19:08
* @description:Spring皮肤工厂:具体工厂
*/
public class SpringSkinFactory implements SkinFactory {
@Override
public Button createButton() {
return new SpringButton();
}
@Override
public TextField createTextField() {
return new SpringTextField();
}
@Override
public ComboBox createComboBox() {
return new SpringComboBox();
}
}
/**
* @author Satsuki
* @time 2019/6/9 19:05
* @description:Summer文本框类:具体产品
*/
public class SummerTextField implements TextField {
@Override
public void display() {
System.out.println("显示蓝色边框文本框。");
}
}
/**
* @author Satsuki
* @time 2019/6/9 19:07
* @description:Summer组合框类:具体产品
*/
public class SummerComboBox implements ComboBox {
@Override
public void display() {
System.out.println("显示蓝色边框组合框。");
}
}
/**
* @author Satsuki
* @time 2019/6/9 19:03
* @description:Summer按钮类:具体产品
*/
public class SummerButton implements Button {
@Override
public void display() {
System.out.println("显示浅蓝色按钮");
}
}
/**
* @author Satsuki
* @time 2019/6/9 19:09
* @description:Summer皮肤工厂:具体工厂
*/
public class SummerSkinFactory implements SkinFactory {
@Override
public Button createButton() {
return new SummerButton();
}
@Override
public TextField createTextField() {
return new SummerTextField();
}
@Override
public ComboBox createComboBox() {
return new SummerComboBox();
}
}
public class client {
public static void main(String[] args) {
//使用抽象层定义
SkinFactory factory;
Button bt;
TextField tf;
ComboBox cb;
factory = new SpringSkinFactory();
bt = factory.createButton();
tf = factory.createTextField();
cb = factory.createComboBox();
bt.display();
tf.display();
cb.display();
}
}