驻马店市住房和城乡建设局网站首页,网站的布局方式有哪些方面,确定网站主题然后规划网站建设,在深圳怎么注册一家公司文章目录 1. 概念2. 实际的应用 1. 概念 FactoryMethod 模式是设计模式中应用最为广泛的模式#xff0c;在面向对象的编程中#xff0c;对象的创建工作非常简单#xff0c;对象的创建时机却很重要。 FactoryMethod 解决的就是这个问题#xff0c;它通过面向对象的手法… 文章目录 1. 概念2. 实际的应用 1. 概念 FactoryMethod 模式是设计模式中应用最为广泛的模式在面向对象的编程中对象的创建工作非常简单对象的创建时机却很重要。 FactoryMethod 解决的就是这个问题它通过面向对象的手法将所要创建的具体对象的创建工作延迟到了子类从而提供了一种扩展的策略较好的解决了这种紧耦合的关系。
听不懂是吧下面直接举例说明
2. 实际的应用 注图中原作者出现笔误BMW错拼成了BWM 上图中①是BMW的产品接口②是产品工厂的接口。
代码实现 1开发人员A的工作 接口BMW.java
package day09;
/*** 宝马车的产品接口* author 14532**/
public interface BMW {//产品的信息介绍//车的发动方式void showInfo();
}/*** 构建具体的车的类* author 14532**/
class BMW3 implements BMW{Overridepublic void showInfo() {System.out.println(这个是宝马3系车);}
}class BMW5 implements BMW{Overridepublic void showInfo() {System.out.println(这个是宝马5系车); }
}class BMW7 implements BMW{Overridepublic void showInfo() {System.out.println(这个是宝马7系车); }
}接口BMWFactory.java
package day09;
/*** 汽车生产工厂接口* author 14532**/
public interface BMWFactory {BMW productBMW();
}/*** 实现具体的车型的生产工厂* author 14532**/
class BMW3Factory implements BMWFactory{Overridepublic BMW productBMW() {System.out.println(生产宝马3系车);return new BMW3();}
}class BMW5Factory implements BMWFactory{Overridepublic BMW productBMW() {System.out.println(生产宝马5系车);return new BMW5();}
}class BMW7Factory implements BMWFactory{Overridepublic BMW productBMW() {System.out.println(生产宝马7系车);return new BMW7();}
}2开发人员B的工作 Test.java
package day09;public class Test2 {public static void main(String[] args) {//这是开发人员B的工作BMW b3 new BMW3Factory().productBMW();b3.showInfo();BMW b5 new BMW5Factory().productBMW();b5.showInfo();BMW b7 new BMW7Factory().productBMW();b7.showInfo();}}运行结果
如果现在需要对宝马3系的车进行改造改成宝马3i该如何实现 BMW.java中class BMW3 implements BMW{改成class BMW3i implements BMW{ BMWFactory.java中return new BMW3();改成return new BMW3i(); 为了区别改造的在类BMW3Factory中添加一段输出System.out.println(改造3系车定名为BMW3i型号); 更改后的代码
1开发人员A的工作产生了变化 接口BMW.java
package day09;
/*** 宝马车的产品接口* author 14532**/
public interface BMW {//产品的信息介绍//车的发动方式void showInfo();
}/*** 构建具体的车的类* author 14532**/
class BMW3i implements BMW{//更改为BMW3iOverridepublic void showInfo() {System.out.println(这个是宝马3系车);}
}class BMW5 implements BMW{Overridepublic void showInfo() {System.out.println(这个是宝马5系车);}
}class BMW7 implements BMW{Overridepublic void showInfo() {System.out.println(这个是宝马7系车);}
}
接口BMWFactory.java
package day09;
/*** 汽车生产工厂接口* author 14532**/
public interface BMWFactory {BMW productBMW();
}/*** 实现具体的车型的生产工厂* author 14532**/
class BMW3Factory implements BMWFactory{//在BMW3Factory中改造BMW3为BMW3iOverridepublic BMW productBMW() {System.out.println(生产宝马3系车);System.out.println(改造3系车定名为BMW3i型号);return new BMW3i();//返回BMW3i}}class BMW5Factory implements BMWFactory{Overridepublic BMW productBMW() {System.out.println(生产宝马5系车);return new BMW5();}}class BMW7Factory implements BMWFactory{Overridepublic BMW productBMW() {System.out.println(生产宝马7系车);return new BMW7();}}
2开发人员B的工作没有变化 Test.java
package day09;public class Test2 {public static void main(String[] args) {//这是开发人员B的工作BMW b3 new BMW3Factory().productBMW();b3.showInfo();BMW b5 new BMW5Factory().productBMW();b5.showInfo();BMW b7 new BMW7Factory().productBMW();b7.showInfo();}}输出结果 通过工厂把new对象给隔离通过产品的接口可以接收不同实际产品的实现类。实现的类名的改变不影响其他合作开发人员的编程。