上海开发网站,一个做网站编程的条件,国外做游戏的视频网站,阿里云 装wordpress工厂设计模式-工厂方法
1.概念
工厂方法模式(Fatory Method Pattern ) 是指定义一个创建对象的接口#xff0c;但让实现这个接口的类来决定实例化哪个类#xff0c;工厂方法让类的实例化推迟到子类中进行。
在工厂方法模式中用户只需要关心所需产品对应的工厂#xff0c;…工厂设计模式-工厂方法
1.概念
工厂方法模式(Fatory Method Pattern ) 是指定义一个创建对象的接口但让实现这个接口的类来决定实例化哪个类工厂方法让类的实例化推迟到子类中进行。
在工厂方法模式中用户只需要关心所需产品对应的工厂无须关心创建细节。
2.案例说明和分析
2.1 定义一个创建对象的接口
public interface ICourse {void record(); //录制抽象功能
}
public class JavaCourse implements ICourse {public void record() {System.out.println(录制Java课程);}
}
public class PythonCourse implements ICourse {public void record() {System.out.println(录制Python课程);}
}/** 工厂模型 */
public interface ICourseFactory {ICourse create();
}2.2 定义接口和实现类
public class JavaCourseFactory implements ICourseFactory {public ICourse create() {return new JavaCourse();}
}
public class PythonCourseFactory implements ICourseFactory {public ICourse create() {return new PythonCourse();}
}2.3实现这个接口的类来决定实例化哪个类工厂方法让类的实例化推迟到子类中进行。
public class FactoryMethodTest {public static void main(String[] args) {ICourseFactory factory new PythonCourseFactory();ICourse course factory.create();course.record();factory new JavaCourseFactory();course factory.create();course.record();}
}2.4 类图 3.总结
使用步骤
创建一个接口A(实现抽象接口功能名write() )和实现类AImpl(实现逻辑代码:writ(){…})。
在创建创建一个接口工厂B(实现抽象功能返回接口A对象: creatA();)和实现类BImpl(实现逻辑返回AImpl实现类对象:createA(){ return new AImpl();})。
创建一个调用类 - B b new BImpl(); A a b.createA(); a.write();
代码实现
public interface A {void write();
}
//业务实现逻辑
public class AImpl implements A {public void write() {//不依赖于产品类实例如何被创建、实现等细节 System.out.println(写Java作业);}
}//-------------------------------
public interface B {A createA();
}
public class BImpl implements B {public A createA() {//创建对象需要大量重复的代码return new AImpl(); //一个类通过其子类来指定创建哪个对象}
}B b new BImpl();
A a b.createA();
a.write();为什么要使用工厂方法了啊解决什么问题。
创建对象需要大量重复的代码客户端(应用层)不依赖于产品类实例如何被创建、实现等细节 一个类通过其子类来指定创建哪个对象
工厂方法也有缺点
类的个数容易过多增加复杂度增加了系统的抽象性和理解难度
工厂设计模式-抽象工厂
1.案例说明和分析
//步骤1创建接口和实现类
public interface ICourse {/* 录制视频 */void record();
}
public class JavaCourse implements ICourse {public void record() {System.out.println(录制Java课程);}
}
//多个....// 步骤2 创建抽象工厂类并创建抽象方法返回实现类对象(接口对象)
public abstract class CourseFactory {public void init(){System.out.println(初始化基础数据);}protected abstract ICourse createCourse();//(都属于同一组的产品(小米空调小米电视小米手机)之间有一些联系) 多个....
}//步骤3继承抽象类工厂并实现抽象方法(创建实现类并返回)
public class JavaCourseFactory extends CourseFactory {public ICourse createCourse() {super.init();return new JavaCourse();}
}
//多个....// 步骤4创建继承抽象类的实例对象并调用实现类中的业务逻辑方法
public class AbstractFactoryTest {public static void main(String[] args) {//一起使用创建对象需要大量重复的代码,这里就解决了。CourseFactory factory new JavaCourseFactory();factory.createCourse().record();//多个...}
}
2.类图 3.总结
3.1 创建步骤
步骤1创建接口和实现类步骤2 创建抽象工厂类并创建抽象方法返回实现类对象(接口对象)步骤3继承抽象类工厂并实现抽象方法(创建实现类并返回)步骤4创建继承抽象类的实例对象并调用实现类中的业务逻辑方法
3.2 使用理解
强调的是系列相关的产品对象(属于同一产品族)一起使用创建对象需要大量重复的代码。
同一产品结构下还有格力热水器格力空调格力洗衣机。 3.3使用场景
如需要创建小米品牌一组家电(电视空调电饭锅等等)的对象一个一个创建代码过多而且创建过程过程复杂这时可以用抽象工厂方法封装一起来调用就会变得简单。
如果创建多种品牌家电每种品牌等级和价格不同这时候就使用抽象工厂方法封装传入什么参数调用什么等级家电产品返回一组家电对象。
参考 https://refactoringguru.cn/design-patterns/factory-method https://www.yuque.com/huangjinshidai-1wt9t/ocmvo8/zr4ypvhosvzzmh24?singleDoc#