网站备案要什么资料,wordpress作者链接,石家庄电力设计公司,网站优化的论文文章目录 定义与类型适用场景优点缺点产品等级结构与产品族抽象工厂代码示例 定义与类型
定义#xff1a;抽象工厂模式提供一个创建一系列相关或相互依赖对象的接口#xff0c;无须指定它们具体的类。
类型#xff1a;创建型。
适用场景
客户端#xff08;应用层#… 文章目录 定义与类型适用场景优点缺点产品等级结构与产品族抽象工厂代码示例 定义与类型
定义抽象工厂模式提供一个创建一系列相关或相互依赖对象的接口无须指定它们具体的类。
类型创建型。
适用场景
客户端应用层不依赖于产品类实例如何被创建、实现等细节强调一系列相关的产品对象属于同一产品族一起使用创建对象需要大量重复的代码提供一个产品类的库所有的产品以同样的接口出现从而使客户端不依赖于具体实现
优点
具体产品在应用层代码隔离无须关心创建细节将一个系列的产品族统一到一起创建
缺点
规定了所有可能被创建的产品集合产品族中扩展新的产品困难需要修改抽象工厂的接口增加了系统的抽象性和理解难度
产品等级结构与产品族 横着来看海尔洗衣机、海尔冰箱、海尔空调它们都是海尔品牌它们都属于海尔这个产品族。
竖着来看海尔空调、美的空调、海信空调它们都是空调它们属于同一个产品等级结构。
工厂方法模式针对的就是产品等级结构抽象工厂模式针对的就是产品族。
如下图所示当一个工厂可以创建出分属于不同产品等级结构的一个产品族中的所有对象时使用抽象工厂模式更为简单高效。 抽象工厂代码示例 CourseFactory.java
package com.czh.creational.abstractfactory;public interface CourseFactory {Video getVideo();Note getNote();
}JavaCourseFactory.java
package com.czh.creational.abstractfactory;public class JavaCourseFactory implements CourseFactory {Overridepublic Video getVideo() {return new JavaVideo();}Overridepublic Note getNote() {return new JavaNote();}
}PythonCourseFactory.java
package com.czh.creational.abstractfactory;public class PythonCourseFactory implements CourseFactory {Overridepublic Video getVideo() {return new PythonVideo();}Overridepublic Note getNote() {return new PythonNote();}
}Video.java
package com.czh.creational.abstractfactory;public abstract class Video {public abstract void play();
}JavaVideo.java
package com.czh.creational.abstractfactory;public class JavaVideo extends Video {Overridepublic void play() {System.out.println(播放Java课程视频);}
}PythonVideo.java
package com.czh.creational.abstractfactory;public class PythonVideo extends Video {Overridepublic void play() {System.out.println(播放Python课程视频);}
}Note.java
package com.czh.creational.abstractfactory;public abstract class Note {public abstract void read();
}JavaNote.java
package com.czh.creational.abstractfactory;public class JavaNote extends Note {Overridepublic void read() {System.out.println(阅读Java课程笔记);}
}PythonNote.java
package com.czh.creational.abstractfactory;public class PythonNote extends Note {Overridepublic void read() {System.out.println(阅读Python课程笔记);}
}Test.java
package com.czh.creational.abstractfactory;public class Test {public static void main(String[] args) {CourseFactory courseFactory1 new JavaCourseFactory();Video video1 courseFactory1.getVideo();Note note1 courseFactory1.getNote();video1.play();note1.read();CourseFactory courseFactory2 new PythonCourseFactory();Video video2 courseFactory2.getVideo();Note note2 courseFactory2.getNote();video2.play();note2.read();}
}