创建型设计模式
1.简单工厂
package design.factory.factorySimple;
/**
* 抽象图标接口
*/
public interface Chart {
public void display();
}
柱状图实现
/*
*/
package design.factory.factorySimple;
/**
* @version PieChart.java, v 0.1 2022年01月13日 17:05
*/
public class HistogramChart implements Chart{
public HistogramChart() {
System.out.println("初始化柱状图");
}
public void display() {
System.out.println("画柱状图");
}
}
折线图实现
/*
*/
package design.factory.factorySimple;
/**
* @version PieChart.java, v 0.1 2022年01月13日 17:05
*/
public class LineChart implements Chart{
public LineChart() {
System.out.println("初始化折线图");
}
public void display() {
System.out.println("画折线图");
}
}
饼图实现
/*
*/
package design.factory.factorySimple;
/**
* @version PieChart.java, v 0.1 2022年01月13日 17:05
*/
public class PieChart implements Chart{
public PieChart() {
System.out.println("初始化饼图");
}
public void display() {
System.out.println("画饼图");
}
}
测试:
/*
*/
package design.factory.factorySimple;
/**
* @version SimpleFactory.java, v 0.1 2022年01月13日 17:03
* 创建型模式
*/
public class SimpleFactory {
public static Chart getChart(String type){
Chart chart = null;
if("line".equalsIgnoreCase(type)){
chart = new LineChart();
}else if("pie".equalsIgnoreCase(type)){
chart = new PieChart();
}else if("histogram".equalsIgnoreCase(type)){
chart = new HistogramChart();
}
return chart;
}
public static void main(String[] args) {
Chart line = SimpleFactory.getChart("line");
line.display();
Chart pie = SimpleFactory.getChart("pie");
pie.display();
Chart histogram = SimpleFactory.getChart("histogram");
histogram.display();
}
}
2. 工厂方法模式
/*
*/
package design.factory.factoryMethod;
/**
* @version Chart.java, v 0.1 2022年01月13日 17:04
* 抽象图标接口
*/
public interface Chart {
public void display();
}
/*
*/
package design.factory.factoryMethod;
/**
* @version PieChart.java, v 0.1 2022年01月13日 17:05
*/
public class HistogramChart implements Chart {
public HistogramChart() {
System.out.println("初始化柱状图");
}
public void display() {
System.out.println("画柱状图");
}
}
/*
*/
package design.factory.factoryMethod;
/**
* @version PieChart.java, v 0.1 2022年01月13日 17:05
*/
public class LineChart implements Chart {
public LineChart() {
System.out.println("初始化折线图");
}
public void display() {
System.out.println("画折线图");
}
}
/*
*/
package design.factory.factoryMethod;
/**
* @version PieChart.java, v 0.1 2022年01月13日 17:05
*/
public class PieChart implements Chart {
public PieChart() {
System.out.println("初始化饼图");
}
public void display() {
System.out.println("画饼图");
}
}
/*
*/
package design.factory.factoryMethod;
/**
* @version FactoryMethod.java, v 0.1 2022年01月13日 17:27
* 创建型模式
* 抽象工厂
*/
public interface FactoryMethod {
public Chart getChart();
}
/*
*/
package design.factory.factoryMethod;
/**
* @version LineChartFactory.java, v 0.1 2022年01月13日 17:29
* *具体工厂: 柱状图工厂
*/
public class HistogramChartFactory implements FactoryMethod{
public Chart getChart() {
return new HistogramChart();
}
}
/*
*/
package design.factory.factoryMethod;
/**
* @version LineChartFactory.java, v 0.1 2022年01月13日 17:29
* 具体工厂: 折线图工厂
*/
public class LineChartFactory implements FactoryMethod{
public Chart getChart() {
return new LineChart();
}
}
/*
*/
package design.factory.factoryMethod;
/**
* @version Client.java, v 0.1 2022年01月13日 17:31
*/
public class Client {
public static void main(String[] args) {
FactoryMethod factoryMethod = new HistogramChartFactory();
Chart chart = factoryMethod.getChart();
chart.display();
factoryMethod = new LineChartFactory();
chart = factoryMethod.getChart();
chart.display();
factoryMethod = new PieChartFactory();
chart = factoryMethod.getChart();
chart.display();
}
}
3.抽象工厂模式
/*
*/
package design.factory.factoryAbstract;
/**
* @version Engine.java, v 0.1 2022年01月16日 17:05
* 抽象产品:发动机
*/
public interface Engine {
public void makeEngine();
}
/*
*/
package design.factory.factoryAbstract;
/**
* @version Tyre.java, v 0.1 2022年01月16日 17:00
* 抽象的产品:轮胎
*/
public interface Tyre {
public void makeTyre();
}
/*
*/
package design.factory.factoryAbstract;
/**
* @version FactoryAbstract.java, v 0.1 2022年01月16日 17:08
* 抽象工厂
*/
public interface FactoryAbstract {
public Engine getEngine();
public Tyre getTyre();
}
/*
*/
package design.factory.factoryAbstract;
/**
* @version BydTyre.java, v 0.1 2022年01月16日 17:01
*/
public class AoDiEngine implements Engine {
public void makeEngine() {
System.out.println("生产奥迪发动机");
}
}
/*
*/
package design.factory.factoryAbstract;
/**
* @version EngineFactory.java, v 0.1 2022年01月16日 17:11
*/
public class AoDiFactory implements FactoryAbstract {
public Engine getEngine() {
return new AoDiEngine();
}
public Tyre getTyre() {
return new AoDiTyre();
}
}
/*
*/
package design.factory.factoryAbstract;
/**
* @version BydTyre.java, v 0.1 2022年01月16日 17:01
*/
public class AoDiTyre implements Tyre {
public void makeTyre() {
System.out.println("生产奥迪轮胎");
}
}
/*
*/
package design.factory.factoryAbstract;
/**
* @version BydTyre.java, v 0.1 2022年01月16日 17:01
*/
public class BaoMaEngine implements Engine {
public void makeEngine() {
System.out.println("生产宝马发动机");
}
}
/*
*/
package design.factory.factoryAbstract;
/**
* @version EngineFactory.java, v 0.1 2022年01月16日 17:11
*/
public class BaoMaFactory implements FactoryAbstract {
public Engine getEngine() {
return new BaoMaEngine();
}
public Tyre getTyre() {
return new BaoMaTyre();
}
}
/*
*/
package design.factory.factoryAbstract;
/**
* @version BmTyre.java, v 0.1 2022年01月16日 17:03
*/
public class BaoMaTyre implements Tyre{
public void makeTyre() {
System.out.println("生产宝马轮胎");
}
}
/*
*/
package design.factory.factoryAbstract;
/**
* @version BydTyre.java, v 0.1 2022年01月16日 17:01
*/
public class BenChiEngine implements Engine {
public void makeEngine() {
System.out.println("生产奔驰发动机");
}
}
/*
*/
package design.factory.factoryAbstract;
/**
* @version EngineFactory.java, v 0.1 2022年01月16日 17:11
*/
public class BenChiFactory implements FactoryAbstract {
public Engine getEngine() {
return new BenChiEngine();
}
public Tyre getTyre() {
return new BenChiTyre();
}
}
/*
*/
package design.factory.factoryAbstract;
/**
* @version BcTyre.java, v 0.1 2022年01月16日 17:02
*/
public class BenChiTyre implements Tyre{
public void makeTyre() {
System.out.println("生产奔驰轮胎");
}
}
/*
*/
package design.factory.factoryAbstract;
/**
* @version Client.java, v 0.1 2022年01月16日 17:23
*/
public class Client {
public static void main(String[] args) {
FactoryAbstract factoryAbstract = new BaoMaFactory();
Engine engine = factoryAbstract.getEngine();
engine.makeEngine();
Tyre tyre = factoryAbstract.getTyre();
tyre.makeTyre();
factoryAbstract = new AoDiFactory();
engine = factoryAbstract.getEngine();
engine.makeEngine();
tyre = factoryAbstract.getTyre();
tyre.makeTyre();
}
}