Java设计模式编程中简单工厂与抽象工厂模式的使用实例
程序员文章站
2024-03-09 15:16:17
简单工厂模式
类图
通过一个工厂类,以一个条件来创建对应的对象
//业务功能
public interface icalculation {...
简单工厂模式
类图
通过一个工厂类,以一个条件来创建对应的对象
//业务功能 public interface icalculation { double getresult(double numa, double numb); } public class calcadd implements icalculation { @override public double getresult(double numa, double numb) { system.out.println("加法"); return numa + numb; } } public class calcsubtract implements icalculation { @override public double getresult(double numa, double numb) { system.out.println("减法"); return numa - numb; } } /* * 简单工厂模式 关注:对象的创建 * 建立一个工厂类,对实现了同一接口的或者是存在继承关系的一些类进行实例的创建 */ public class test4simple { public static void main(string[] args) { // string operation = "/"; string operation = "+"; // string operation = "-"; // string operation = "*"; double numa = 182, numb = 33; icalculation createcalc = calcsimplefactory.createcalc(operation); double result = createcalc.getresult(numa, numb); system.out.println(result); } }
简单工厂的缺陷: 简单工厂创建产品时需要传递相应的参数,如果传递不正确就取不到对象了。
改进:多方法创建不同产品
类图
public class calcmultiplefactory { public static icalculation produceadd() { return new calcadd(); } public static icalculation producesubtract() { return new calcsubtract(); } public static icalculation producemultiply() { return new calcmultiply(); } public static icalculation producedivide() { return new calcdivide(); } } public class test4multiple { public static void main(string[] args) { double numa = 182, numb = 33; icalculation createcalc = calcmultiplefactory.produceadd(); double result = createcalc.getresult(numa, numb); system.out.println(result); createcalc = calcmultiplefactory.producesubtract(); result = createcalc.getresult(numa, numb); system.out.println(result); createcalc = calcmultiplefactory.producemultiply(); result = createcalc.getresult(numa, numb); system.out.println(result); createcalc = calcmultiplefactory.producedivide(); result = createcalc.getresult(numa, numb); system.out.println(result); } }
抽象工厂模式
里面有几个概念:抽象工厂、实体工厂、抽象产品、实体产品
抽象工厂:定义创建产品的抽象方法
实体工厂:具体的创建哪种产品
抽象产品:一个接口或基类
实体产品:实现具体功能,或派生
类图
//抽象产品1 public interface iproduct1 { public void show(); } //抽象产品2 public interface iproduct2 { public void show(); } //实体产品1 public class product1 implements iproduct1 { public void show() { system.out.println("创建了1型产品"); } } //实体产品2 public class product2 implements iproduct2 { public void show() { system.out.println("创建了2型产品"); } } /* * 1a 1b属于product1 同一产品等级结构中 * 2a 2b属于product2 */ public class gradeproduct1a extends product1 { @override public void show() { super.show(); system.out.println("这是产品1下的:产品a"); } } public class gradeproduct1b extends product1 { @override public void show() { super.show(); system.out.println("这是产品1下的:产品b"); } } public class gradeproduct2a extends product2 { @override public void show() { super.show(); system.out.println("这是产品2下的:产品a"); } } public class gradeproduct2b extends product2 { @override public void show() { super.show(); system.out.println("这是产品2下的:产品b"); } } //抽象工厂 创建不同的抽象产品 public interface ifactory { public iproduct1 createproduct1a();//1类产品 型号a public iproduct1 createproduct1b();//1类产品 型号b public iproduct2 createproduct2a();//2类产品 型号a public iproduct2 createproduct2b();//2类产品 型号b } //实体工厂 创建实体产品,返回类型为抽象产品 public class factory implements ifactory { public iproduct1 createproduct1a() { return new gradeproduct1a(); } public iproduct1 createproduct1b() { return new gradeproduct1b(); } public iproduct2 createproduct2a() { return new gradeproduct2a(); } public iproduct2 createproduct2b() { return new gradeproduct2b(); } } /* * 抽象工厂模式:用来创建一组相关或者相互依赖的对象 * * 流程:抽象工厂,实体工厂 生产产品 * 抽象产品,实体产品 实现产品功能 * 缺点:当需要增加一个产品(由抽象和实体构成),工厂都需要更改 */ public class test4abstract { public static void main(string[] args) { ifactory factory = new factory(); iproduct1 product1a = factory.createproduct1a(); product1a.show(); iproduct1 product1b = factory.createproduct1b(); product1b.show(); iproduct2 product2a = factory.createproduct2a(); product2a.show(); iproduct2 product2b = factory.createproduct2b(); product2b.show(); } }